AngularJS ng-repeat在新数据进入时不更新视图
angularjs ng-repeat not updating view when new data comes in
我有一个服务,它将调用服务器并返回数据。我正在将服务绑定到范围内的变量。
例:
- 让服务
DataModelService
- 在控制器中:
$scope.data = DataModelService
- 在视图中
<div ng-repeat="value in data.persons">{{value.name}}</div>
我的代码 :
This is how my code looks like:
/**DataModelService**/
factory('DataModelService', [
'DataService',
function (DataService) {
var service;
service = {
changeState: function (params) {
DataService.changePersonState(params)
.then(function (response) {
service.loadData(response.data);
});
},
loadData: function (responseData) {
service.persons = responseData.persons;
}
}
return service;
}
]);
/**DataService**/
factory('DataService', ['$http',
function ($http) {
return {
changePersonState: function (params) {
return $http.post("url", params);
}
}
}
]);
/**DataController**/
.controller('DataController', ['DataModelService',
function (DataModelService) {
$scope.data = DataModelService;
}
]);
/查看/
<div ng-repeat = "person in data.persons" >{{person.name}} </div>
在视图上,我正在对数据中的键进行 ng-repeat,即 ng-repeat="data.personss 中的值"而且我还可以选择将人员的状态更改为活动或非活动状态,因此每当我对人员的状态进行更改时,都会向服务器发送调用并将数据设置为服务,并且当它绑定到视图时,它应该自动更新数据。但是在我的情况下,ng-repeat并没有删除旧数据,而是将新数据附加到旧数据中。
对我来说,将承诺回调(then
)写入服务中并不是好方法。因为在你的情况下,DataModelService
会延迟一些延迟地返回数据,但不是承诺。我们不知道什么时候。
因此,使用其他方法添加基本$timeout
并从服务中获取数据的方法。
所以我的建议是演示
和您的固定示例:演示2
如果我们以你为例,它应该是这样的:
.JS
var fessmodule = angular.module('myModule', ['ngResource']);
fessmodule.controller('fessCntrl', function ($scope, DataModelService, $timeout) {
$scope.alertSwap = function () {
DataModelService.changeState('ff');
$timeout(function(){
$scope.data = DataModelService.getResponse();
}, 10);
}
});
fessmodule.$inject = ['$scope', 'Data', '$timeout'];
/**DataModelService**/
fessmodule.factory('DataModelService', [ 'DataService',function (DataService) {
var value = [];
var service = {
changeState: function (params) {
DataService.changePersonState(params)
.then(function (response) {
value = response.persons;
});
},
getResponse : function(){
return value;
}
}
return service;
}
]);
/**DataService**/
fessmodule.factory('DataService', ['$q',function ($q) {
var data = { // dummy
persons: [{
name: "Bob"
}, {
name: "Mark"
}, {
name: "Kelly"
}]
};
var factory = {
changePersonState: function (selectedSubject) {
var deferred = $q.defer();
deferred.resolve(data);
return deferred.promise;
}
}
return factory;
} //function
]);
相关文章:
- $routeParams在传递到新视图时未定义&控制器
- 从 AngularJS 中的 ngview 内部的视图更新主页
- 如何在渲染新视图之前关闭所有事件
- 从Backbone中的另一个视图调用新视图
- 如何在一个时间间隔后追加新的更新
- Angular2 在创建 ngSwitch 新视图后调用自定义函数
- angularJS视图更新后初始化引导工具提示
- 使用新项目更新KendoUI网格数据源
- 使用新值更新时出现数组问题
- 定期轮询数据库,Rails 视图更新而不刷新
- 如何在 AngularJs 中的数据库发生变化时立即实现自动视图更新
- 使用Plotly中的新数据更新图形的高性能方法
- MySQL 按行[id]使用新信息更新“n”行数
- 使用新数据更新 D3 饼图.json
- 主干新视图反映旧模型数据
- 对数据库进行 AJAX 编辑时,我是否应该立即使用新数据更新接口
- 如何从 AngularJS 视图更新变量
- ngModel 不会在第一次触发视图更新
- 创建新视图时调用呈现函数
- 使用从 MongoDB 获取的新数据更新对象属性