【问题标题】:how can refresh my scope after ajax callajax调用后如何刷新我的范围
【发布时间】:2015-02-08 10:22:24
【问题描述】:

我是 angularjs 的新手。我有人员列表,每个人都有编辑和删除按钮。当我单击编辑按钮时,ng-对话框打开并显示人员详细信息,人员可以更改和保存数据库信息,在保存按钮 ajax 调用触发器和更新数据库信息之后。

更新有关数据库的信息效果很好,但在 UI 方面,我的视图没有反映我的数据库更改。 我曾尝试应用 "$scope.$apply();" 方法,但收到错误消息 "$digest already in progress"

请帮助我,如何在 ajax 调用后刷新我的范围。

【问题讨论】:

标签: angularjs angularjs-scope angularjs-ng-repeat


【解决方案1】:

您可以为此使用shared service,并通过此服务使用broadcast 任何事件。广播事件可以在任何带有$scope.$on 的控制器中监听。

例如:

angular.module("app", []).factory("sharedService", function($rootScope){

    var mySharedService = {};

    mySharedService.values = {};

    mySharedService.personWasUpdated = function(){
        $rootScope.$broadcast('update');
    }

    return mySharedService; 
});

Ctrl 用于人物编辑。

app.controller('personEditController', ['$scope', 'sharedService', '$http', function ($scope, sharedService, $http) {
   $scope.updatePerson = function(newPerson){
       $http.post("../some URL/..", {person: newPerson})
          .success(function(data){
             sharedService.personWasUpdated(); //event broadcasing
          })
   };
}

Ctrl 用于显示人员列表。

app.controller('personController', ['$scope', 'sharedService', '$http', function ($scope, sharedService, $http) {
   var loadPersonsData = function(){
      $http.get("../some URL/..").
         .success(function(data){
            $scope.persons = data;
         })
   };
   loadPersonsData(); //first load

   $scope.$on('update', function () {
      loadPersonsData(); // load after update of any person
   });
}

【讨论】:

    【解决方案2】:

    尝试使用 $scope.$digest(); 或使用 $http 代替 jQuery ajax 或其他

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-30
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多