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

Angularjs 调用初始化函数时无法识别$scope变量,angularjs,angularjs-scope,angularjs-service,Angularjs,Angularjs Scope,Angularjs Service,我有以下代码,我希望从当前用户那里接收所有文本,并在页面加载时在屏幕上显示它们: angular.module('eddieApp') .controller('MainController', function ($scope, Principal, TextService) { $scope.texts = []; Principal.identity().then(function(account) { $scope.ac

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

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无法识别

此外,我还试图在html代码中输入指令ng init=findByUser,但再次出现相同的错误,即$scope.account.login无法识别

最后,我使用$watch函数实现了它,但我不明白为什么前两个方法不起作用,因为它们更容易理解,我会优先使用它们而不是$watch。

它起作用是因为您的$watch确保在运行$scope.findByUser之前定义了$scope.account

在没有手表的示例中,findByUser立即执行,并尝试使用未定义的$scope.account登录属性


如果拥有一个用户帐户是findByUser的先决条件,并且在您的视图中没有任何东西可以立即调用它,那么在您的then块中调用findByUser可能更有意义,这样可以避免使用$watch。

我有预感这就是原因,现在从其他人那里听到我确信。谢谢@阿德尔很高兴听到这个消息。如果答案确实回答了你的问题,请随意接受。