我有一个服务,它将调用服务器并返回数据。我将服务绑定到范围上的变量。
示例:
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.persons中的值” 并且我还可以选择将人员状态更改为活动或非活动状态,因此当我更改人员状态时,会向服务器发送一个呼叫,并将数据设置到服务中,并且绑定到在视图中,它应该自动更新数据。但是在我的情况下发生了什么,ng-repeat不是删除旧数据,而是将新数据附加到旧数据。
答案 0 :(得分:1)
对我而言,将承诺回调(then
)写入服务并不是一个好方法。因为在您的情况下,DataModelService
会返回一些延迟而非承诺的数据。我们不知道什么时候。
因此,通过使用其他方法,使其能够添加基本$timeout
并从服务中获取数据的方法。
所以我的建议是 Demo
和您的固定示例: Demo2
如果我们以你的榜样为例,它应该是:
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
]);