Javascript 从WebApi2 response.data重复刷新

Javascript 从WebApi2 response.data重复刷新,javascript,angularjs,asp.net-web-api,angularjs-ng-repeat,Javascript,Angularjs,Asp.net Web Api,Angularjs Ng Repeat,我创建了一个角度函数,其中一个函数从WebApi获取数据。 此函数通过$http.get调用获取json格式的数据 然后我从response.data对象接收数据 dataService.GetDataFromApi.then( function(response){ ctrl.items = response.data; }, function(error){}); 在html视图页面中,我使用ng repeat显示response

我创建了一个角度函数,其中一个函数从WebApi获取数据。 此函数通过$http.get调用获取json格式的数据

然后我从response.data对象接收数据

    dataService.GetDataFromApi.then(
         function(response){
             ctrl.items = response.data; },
    function(error){});
在html视图页面中,我使用ng repeat显示response.data中的所有项目

<table>
    <tr ng-repeat="item in ControllerNama.items">
        <td>{{ item.name }}</td>
    </tr>
</table>
这工作做得很好

现在,我需要刷新查看页面后,点击一个按钮变成html。单击此按钮时,其中一项将从另一个api中删除。我可以调用相同的api并以开销刷新数据,或者如果remove api返回200状态代码,我可以在不调用refresh api的情况下从ctrl.items中删除数据

哪一个是最好的解决方案?如何在不调用GetDataFromApi函数的情况下按控制器刷新repeat对象


谢谢

如果没有太多关于如何在ng repeat中填充正在迭代的集合的信息,我可以提供通常如何处理从API调用检索到的集合的绑定

通常,我将设置一个Angular服务,其中包含用于API调用的函数,以及一个具有表示数组的属性的对象。例如:

(function () {
    var apiSvc = function ($q, $http) {
        var
            model = function () {
                collection = [];

                return {
                    collection: collection
                };
            },
            getCollection = function () {
                var deferred = $q.defer();

                $http({
                    url: '/api/something/getCollection',
                    method: 'GET'
                }).success(function (data) {
                    model.collection = data;
                    deferred.resolve(data);
                }).error(function (err) {
                    // Do something if this fails
                });

                return deferred.promise;
            };

        return {
            model: model,
            getCollection: getCollection
        };
    };

    // Inject external angular modules into the service
    apiSvc.$inject = ['$q', '$http'];

    // Add the service to your angular module
    apiApp.factory('appSvc', appSvc);
}());
然后,以使用指令为例,将服务注入指令,并将模型对象绑定到指令上的范围对象:

(function () {
    var apiDirective = function (apiSvc) {
        return {
            restrict: 'EA',
            replace: true,
            templateUrl: '/content/templates/demo-directive.html',
            link: function (scope) {
                scope.model = demoSvc.model;
                apiSvc.getCollection();
            }
        }
    };

    apiDirective.$inject = ['apiSvc'];
    apiApp.directive('apiDirective', apiDirective);
}());
并在模板中遍历集合,如下所示:

<div ng-repeat="item in model.collection track by $index">
    <p ng-bind="item.property"></p>
</div>

然后,如果要修改集合,只需调用服务函数来更新集合,您的视图就会反映更新。

尝试使用$scope。$evalAsyncfunction{ctrl.items=response.data;}单击按钮后,我需要刷新查看页面,将其转换为html。这是什么意思?您可以从ctrl.items中剪切删除的数据,或者在删除成功时调用get调用。当我单击视图中的按钮时,调用从db中删除项的api。然后,如果我收到一个200状态码,我想从ctrl.items中删除该项,而不需要重新调用api来获取所有有开销的项。比我想的。。。从ctrl.items中删除元素,视图将更新。如果这不是正确的解决方案,我可以直接调用GetAll api。谢谢,谢谢!我需要做的是从数据库中删除一个调用api的项。若状态代码为200,我不希望重新调用api从数据库中获取所有元素,但我认为应该将其从本地集合中删除,并在ng repeat循环中自动刷新视图。谢谢如果您使用的是RESTAPI,那么您的视图应该始终与API本身保持同步。如果执行删除,则应通过API执行,然后应通过API更新集合。这就是在服务中定义数据绑定对象的原因。视图不会“刷新”,它只是根据与服务交互后对数据绑定的更改进行调整。Ok。然后我使用api删除记录并通过api刷新。谢谢别担心!如果这符合您的问题,请标记为答案: