【发布时间】:2017-08-04 14:44:25
【问题描述】:
我正在尝试实现一个登录功能,将有效用户重定向到个性化的 HTML 视图,以他们的名字欢迎他们。
我的第一个视图是登录视图。当用户单击标记为“登录”的按钮时,ng-click 应该调用我的控制器的 $scope.login,它应该验证用户,设置 $scope.needsLoggingIn 变量,然后重定向到第二个视图(欢迎页面显示$scope.needsLoggingIn 的值)。
我的问题是,当我尝试在$scope.login 函数中设置$scope.needsLoggingIn 变量时,第二个视图(它使用相同的Angular 控制器和模块)没有显示它。当我在控制器中硬编码这样的值时,它只显示$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 函数设置变量值,并让它被使用这个特定控制器的所有视图识别。
【问题讨论】:
-
把它放在
$rootScope中,所有作用域都继承自它。别的...我不认为使用 GET 方法的登录请求是个好主意url:('/login/'+ username + '/' + password ) -
谢谢!!抱歉,这是一个愚蠢的问题,但是否所有视图都有自己的范围,即使它们使用相同的控制器?
-
污染 $rootScope 不是一个好建议。这就是服务的用途。
-
@MikeFeltman 好点,我鼓励 OP 去实现服务
标签: javascript angularjs scope