使用相同的Angular控制器在第二个视图中无法识别范围变量

时间:2017-08-04 14:44:26

标签: javascript angularjs scope

我正在尝试实现一个登录功能,将有效用户重定向到个性化的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函数设置变量值,并让所有使用此特定控制器的视图都能识别它。

1 个答案:

答案 0 :(得分:0)

您希望在不同视图和控制器实例之间拥有的数据应通过服务进行处理。

基本上你会创建一个类似的服务:

function userService($http) { 
    let service = {}
    service.needsLoggingIn = ""
    service.login = login

    return service

    function login() {
       return $http.... (your login code)
    }
}

然后将服务注入您的控件,根据需要设置属性,并且由于服务是单例,因此在您注入服务的任何位置都可以使用这些属性值。