调用初始化函数时,无法识别$ scope变量

时间:2015-02-21 15:18:37

标签: angularjs angularjs-scope angularjs-service

我有以下代码,我希望从当前用户接收所有文本并在页面加载时在屏幕上显示:

angular.module('eddieApp')
    .controller('MainController', function ($scope, Principal, TextService) {

        $scope.texts = [];

        Principal.identity().then(function(account) {
            $scope.account = account;
            $scope.isAuthenticated = Principal.isAuthenticated;
        });

        $scope.findByUser = function(){
            TextService.findByUser($scope.account.login).success(function(data){
                $scope.texts = data;
            });
        };

        // receive all notes from current user
        $scope.$watch(function(scope) { return scope.account; },
                      function()      { $scope.findByUser(); });


    });

问题是它有效,但我不明白为什么这是让它发挥作用的唯一方法。

我试图像这样调用函数$scope.findByUser()

angular.module('eddieApp')
    .controller('MainController', function ($scope, Principal, TextService) {

    $scope.texts = [];

    Principal.identity().then(function(account) {
        $scope.account = account;
        $scope.isAuthenticated = Principal.isAuthenticated;
    });

    $scope.findByUser = function(){
        TextService.findByUser($scope.account.login).success(function(data){
            $scope.texts = data;
        });
    };

    $scope.findByUser();

});

但我收到错误消息,指出无法识别$scope.account.login

另外,我尝试将指令ng-init="findByUser()"放在我的html代码中,但同样,我收到同样的错误,指出$scope.account.login无法识别。

最后我使用$watch函数,但我不明白为什么前两个方法不起作用,因为它们更容易理解,我会更喜欢使用它们而不是{{1 }}

1 个答案:

答案 0 :(得分:0)

这是有效的,因为您的$watch可确保在运行$scope.account之前定义$scope.findByUser

在没有监视的示例中,findByUser会立即执行,并尝试使用未定义的login $scope.account属性。

如果拥有用户帐户是findByUser的先决条件,并且您的视图中没有任何内容可以立即调用它,那么在findByUser块中调用then可能更有意义,这将避免需要$watch