请帮忙!我正在为此扯头发。我为此尝试了很多教程,并且似乎无法远程操作任何东西。
用户可以在页面上添加/删除/更新用户信息,我希望每当他们执行其中一项操作时刷新它。所有操作都可以很好地写入数据库,并且在取回值方面取得了许多成功,但是我无法实时获取视图更新。
我不能使用$ scope。$ apply(); $ digest已经在处理中。我觉得我只缺少一些主键。
服务
angular.module('userlistFactory', [])
.service('Data', function($http){
this.list = function(){
return $http.get('.../getUsers.php', {cache: true})
.then(function(data){
return data.data;
});
}
控制器
userlistControllers.controller('UserListCtrl', ['$scope', 'Data', function ($scope, Data){
Data.list().then(function (data) { // Populates the page the first time through
$scope.users = data;
})
$scope.$watch('Data.list()', function(newValue){ // At this point, I don't understand
$scope.users = newValue;
}, true);
看法
<tr ng-repeat-start="user in users| filter:query | orderBy:'id'">
<td><a href="#/profile/{{user.id}}">{{user.id}}</a></td>
<td>{{user.firstname}}</td> // etc...
谢谢阅读。
当您返回$ http对象并在范围内设置回调时,除非您想处理.fail()或进行进一步处理,否则无需在服务中处理回调。甚至可能是导致错误的退货。
angular.module('userlistFactory', [])
.service('Data', function($http){
this.list = function(){
return $http.get('.../getUsers.php', {cache: true});
}
});
这样,您致电给用户的电话就可以了,但是只会运行一次。如果要在数据库更改后调用它进行更新,则需要将其放入方法中
function UpdateUsers(){
Data.list().then(function (data) {
$scope.users = data;
$scope.$apply(); //Because it was asynch
});
}
您可以摆脱$ watch部分。
现在,当您的用户添加,删除等时,您只需调用update Users方法,就会启动同步请求。返回时,$ scope.users将被更新,$ scope。$ apply()将调用摘要循环来更新您的页面。
当然,您希望您的列表像在评论中一样立即更新。为此,只需在您的控制器中调用该方法即可。
UpdateUsers();
$ http对象似乎有些混乱。您将返回对象并添加.then(....您正在注册回叫。大多数代码示例都一次显示了所有内容$ http(...)。then(...),但在您的情况下,您将在服务中创建它,然后返回该对象,然后在其中将您的回调注册到控制器上。$ http ---->返回到控制器add .then(..),因此您无需在两个实例中都进行处理您可以如何处理.fail(...。如果需要,也可以在任何需要的地方处理。
消除有关$ watch的困惑。Angular仅在绑定对象时才关心它们。如果我有一个未在任何地方使用的值,但我想在值更改时做些事情,则需要$ watch对其进行更改。那是因为没有事件或任何东西可以触发代码。当您将$ watch绑定到某物时,它会自动完成添加,因为它然后在摘要周期中对其进行$ watch监视,以便它可以更新需要更新的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句