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

$scope variable isn't recognized when calling initialization function

我有以下代码,我想在其中接收当前用户的所有文本并在页面加载时在屏幕上显示它们:

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 函数一起工作,但我不明白为什么前两种方法不起作用,因为它们更容易理解,我更喜欢使用它们而不是 $watch.

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

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

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