如何在ajax调用后刷新我的范围

时间:2014-12-10 09:26:04

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

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

更新有关数据库的信息,但在UI端,我的视图不反映我的数据库更改。 我曾尝试应用“$ scope。$ apply();”方法,但我收到错误消息“$ digest已在进行中”

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

2 个答案:

答案 0 :(得分:3)

您可以通过此服务使用shared servicebroadcast任何事件。可以使用$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
   });
}

答案 1 :(得分:1)

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