我正在尝试实现一个登录功能,将有效用户重定向到个性化的HTML视图,欢迎他们使用他们的名字。
我的第一个视图是登录视图。当用户点击标有&#34的按钮时;登录" ng-click
应该调用我的控制器$scope.login
,它应该验证用户,设置$scope.needsLoggingIn
变量,然后重定向到第二个视图(显示值的欢迎页面) $scope.needsLoggingIn
)。
我的问题是当我尝试在$scope.needsLoggingIn
函数中设置时,第二个视图(使用相同的角度控制器和模块)不会显示$scope.login
变量。当我在范围函数之外在控制器中硬编码这样的值时,它只显示$scope.needsLoggingIn
:
$scope.needsLoggingIn = "Betty";
这是我的控制器中的$scope.login
函数,它尝试设置$scope.needsLogging
并在第一个视图中被接受但第二个视图不接受:
$scope.login = function (username, password) {
$http({
method: 'GET',
url: ('/login/' + username + '/' + password)
}).then(function successCallback(response) {
if (JSON.stringify(response.data) === '[]')
{
$scope.needsPasswordMessage = true;
if ($scope.needsPasswordMessage)
$scope.needsPasswordMessage = false;
console.log("No match");
} else {
$scope.needsLoggingIn = username;
$scope.issuccessMessage = true;
if ($scope.isfailureMessage)
$scope.isfailureMessage = false;
$window.location.href = '../indextest.html';
return response;
}
}, function errorCallback(response) {
});
};
有没有人有任何建议如何让我的$scope.needsLoggingIn
被两个HTML视图识别,而不将其硬编码到控制器中?我真的希望能够让$scope.login
函数设置变量值,并让所有使用此特定控制器的视图都能识别它。
答案 0 :(得分:0)
您希望在不同视图和控制器实例之间拥有的数据应通过服务进行处理。
基本上你会创建一个类似的服务:
function userService($http) {
let service = {}
service.needsLoggingIn = ""
service.login = login
return service
function login() {
return $http.... (your login code)
}
}
然后将服务注入您的控件,根据需要设置属性,并且由于服务是单例,因此在您注入服务的任何位置都可以使用这些属性值。