Jaz*_*zzy 8 javascript javascript-framework angularjs
我试图在控制器中使用一个函数来返回数据,这样我就可以在应用程序中重用该函数来调用数据并偶尔刷新它.
我的代码看起来是正确的,但实际上,在每次加载时都会崩溃浏览器.
我能够通过使用E指令然后将元素放在部分中来使其工作,但这不能实现我所需要的.
最终,我想做这样的事情:
<div ng-repeat="user in getListUsers()">{{ user.somedata }}</div>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种各样的东西让它在测试中工作,包括将$ 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;
});
Run Code Online (Sandbox Code Playgroud)
编辑:
使用下面的一些想法,我能够以不同的方式获得我想要的功能.基本上,我希望数据按需加载,而不是预先加载,因为我试图将该控制器中的所有用户逻辑分组,并且我不希望为每个用户加载完整数据.我暂时使用$ rootScope,直到我找出一些范围继承问题,因为使用$ scope.users在模板中以空值结束.我可以看到AJAX呼叫回来,但不知道它在哪里,但这是另一个问题.
elite.controller('UserController', function($scope, $rootScope, User){
$scope.getListUsers = function(){
User.listUsers().then(function(response){
$rootScope.users = response.users;
});
};
});
Run Code Online (Sandbox Code Playgroud)
在nav元素中我有这个:
<div ng-controller="UserController">
<a ng-href="/#user/list" ng-click="getListUsers()">user list</a>
</div>
Run Code Online (Sandbox Code Playgroud)
这是关于$ digest,$ watch和ng-repeat.只需谷歌搜索或查看Jsplaine给出的链接,您就可以找到很多答案.
简而言之,getListUsers()函数每次调用时都会返回一个Users列表.但是,每个返回的列表都是一个新集合(数组).对于角度,这意味着它必须更新页面上列表的显示.每次更新后,Angular会通过再次调用getListUsers()函数来检查列表是否变得稳定.每当angular发现列表不同时,它就会不断更新列表并继续调用getListUser函数.
要解决此问题,您可以创建一个包含用户列表的变量:
$scope.userList = [];
Run Code Online (Sandbox Code Playgroud)
以及更新列表的功能
$scope.reloadListUsers = function(){
User.listUsers().then(function(response){
$scope.userList = response.users;
});
}
Run Code Online (Sandbox Code Playgroud)
然后在ng-repeat指令中
<div ng-repeat="user in userList">{{ user.somedata }}</div>
Run Code Online (Sandbox Code Playgroud)
如果要重新加载列表,只需调用reloadListUsers函数即可.
<button ng-click="reloadListUsers()" > reload </button>
Run Code Online (Sandbox Code Playgroud)
背后的原因是现在变量userList用于绑定而不是函数调用表达式,并且一旦加载列表就变得稳定.
| 归档时间: |
|
| 查看次数: |
60062 次 |
| 最近记录: |