【发布时间】:2014-01-23 10:31:26
【问题描述】:
我正在尝试使用控制器中的函数来返回数据,以便我可以在整个应用程序中重复使用该函数来调用数据以及偶尔刷新它。
我的代码看起来是正确的,但实际上,每次加载时浏览器都会崩溃。
我可以通过使用 E 指令然后将元素放置在部分中来使其工作,但这并不能满足我的需要。
最终,我想做这样的事情:
<div ng-repeat="user in getListUsers()">{{ user.somedata }}</div>
我尝试了各种方法让它在测试中工作,包括将 $http 放入控制器中,所有结果都相同。
如果我在控制器方法中分配一个变量而不是返回数据,那是可行的,但是我需要在控制器中调用该方法,并且我不希望它默认运行。只是希望在需要时在模板中进行调用。
任何帮助弄清楚为什么这不起作用会很棒。谢谢。
这是我所拥有的不起作用的东西......
elite.controller('UserController', function($scope, User){
$scope.getListUsers = function(){
User.listUsers().then(function(response){
return response.users;
});
}
});
elite.factory('User', function($http){
var User = {
getUser: function(id){
return $http.get('/user/' + id + '/settings').then(function(response){
return response.data;
});
},
listUsers: function(){
return $http.get('/user/').then(function(response){
return response.data;
});
}
}
return User;
});
编辑:
使用下面的一些想法,我能够以不同的方式获得我想要的功能。基本上,我希望数据按需加载,而不是预先加载,因为我试图在该控制器中对所有用户逻辑进行分组,并且我不希望为每个用户加载完整数据。我暂时使用 $rootScope 直到我找出一些范围继承问题,因为使用 $scope.users 最终在模板中得到一个空值。我可以看到 AJAX 调用回来了,但不确定它的去向,但这是另一个问题。
elite.controller('UserController', function($scope, $rootScope, User){
$scope.getListUsers = function(){
User.listUsers().then(function(response){
$rootScope.users = response.users;
});
};
});
在导航元素中我有这个:
<div ng-controller="UserController">
<a ng-href="/#user/list" ng-click="getListUsers()">user list</a>
</div>
【问题讨论】:
-
我之前看到过,但即使我不使用 ng-repeat 也会出现问题。例如,如果我只是将函数放在括号中,例如 {{ getListUsers() }} ,浏览器仍然会崩溃而不是显示对象。
标签: javascript angularjs javascript-framework