我有以下代码,我希望从当前用户接收所有文本并在页面加载时在屏幕上显示:
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 }}
答案 0 :(得分:0)
这是有效的,因为您的$watch
可确保在运行$scope.account
之前定义$scope.findByUser
。
在没有监视的示例中,findByUser
会立即执行,并尝试使用未定义的login
$scope.account
属性。
如果拥有用户帐户是findByUser
的先决条件,并且您的视图中没有任何内容可以立即调用它,那么在findByUser
块中调用then
可能更有意义,这将避免需要$watch
。