AngularJS - 范围未在控制器功能中应用

时间:2014-12-18 00:37:57

标签: javascript angularjs controller scope angularjs-scope

我试图在控制器的功能中修改$ scope内的变量并且效果有效,但在视图中不适用。

app.controller('LoginCtrl', ['$scope', '$http', function ($scope, $http) {

    $scope.test = "test";

    $scope.logIn = function() {
        // This changes the value to test2, but does not applies it to the view.
        $scope.test = "test2";
    };

}]);

在login.html中:

  DEBUG: {{ test }}

和routeProvider:

$routeProvider
    .when('/', {
        templateUrl: '/views/login.html',
        controller: 'LoginCtrl'
    })

我错过了文档吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

这是因为angular不知道logIn函数所做的范围更改,我认为在您的情况下是异步调用的。在异步调用logIn()之后,通过

强制更改范围
$scope.$apply()

答案 1 :(得分:0)

所以我认为这是一个已知原语的参考或继承问题,请参阅此帖https://github.com/angular/angular.js/wiki/Understanding-Scopes。尝试使用相同的代码,但将 test 放在一个对象中,如下所示:

$scope.viewModel = {};
$scope.viewModel.test = 'Test';

答案 2 :(得分:0)

我发现我把ng-controller =“”放在调用logIn()函数的HTML元素中。

实际上,我调用了两次并导致视图更新失败。