Javascript angularjs ng在收到新数据时重复不更新视图

Javascript angularjs ng在收到新数据时重复不更新视图,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我有一个服务,它将调用服务器并返回数据。我正在将服务绑定到作用域上的变量 例如: 让服务成为DataModelService 在控制器中:$scope.data=DataModelService 在视图{{value.name}} 我的代码: This is how my code looks like: /**DataModelService**/ factory('DataModelService', [ 'DataService', function (DataSer

我有一个服务,它将调用服务器并返回数据。我正在将服务绑定到作用域上的变量

例如:

  • 让服务成为
    DataModelService
  • 在控制器中:
    $scope.data=DataModelService
  • 在视图
    {{value.name}}
我的代码:

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;
    }
]);
/查看/

{{person.name}}

在视图中,我正在对数据中的一个键执行ng REPLAT,即ng REPLAT=“data.persons中的值”
我还可以选择将个人状态更改为活动或非活动,因此当我更改个人状态时,会向服务器发送一个调用,并将数据设置到服务中,当数据绑定到视图时,它会自动更新数据。但在我的例子中,ng repeat并没有删除旧数据,而是将新数据附加到旧数据中

对我来说,将承诺回调(
然后
)写入服务不是一个好方法。因为在您的情况下,
DataModelService
返回数据时会有一些延迟,但没有保证。我们不知道什么时候

因此,使其工作的方法是添加basic
$timeout
,并使用其他方法从服务中获取数据

所以我的建议是

还有你的固定示例:

如果我们以你为例,应该是这样的:

JS


请张贴相关代码。我们如何利用这些最少的信息解决问题?您确定服务器的数据符合预期吗?是的。第一次,它工作正常,即ng repeat显示正确的数据,但每当进行新调用时,我从服务器获得更新状态的相同数据。它显示以前的数据和新数据。我还在控制台中打印了数据,它有正确的数据。问题是旧数据不会被新数据替换,即使人们在其中有新数据。实际上,我的datamodelservice调用了一个dataservice,该dataservice将调用服务器并向datamodelservice返回一个承诺,在服务中我将数据设置到其中。我添加了演示。顺便说一句,我向您展示了如何在模型
数据上运行
ng repeat
的概念。填充到
然后
callback@AnutejaMallampati我认为把承诺付诸实施是不好的service@AnutejaMallampati查看我发布的编辑,希望对您有所帮助,但这是我第一次使用resolve使UI等待,直到我从服务器返回响应,但一旦UI呈现,并且我对状态进行了任何更改,就会向服务器发送一个调用并更新服务。当服务绑定到控制器中的视图时,它应该自动用新数据更新视图,但它不会发生,而是显示旧数据和新数据,并且当我再次更改状态时,新数据将被替换,而不是第一次呈现的旧数据。
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
]);