我是angularjs.的新手。我有人员名单,每个人都有编辑和删除按钮。当我点击编辑按钮时,对话框打开并显示人员详细信息,人员可以更改并保存数据库信息,后面保存按钮ajax调用触发器并更新数据库信息。
更新有关数据库的信息,但在UI端,我的视图不反映我的数据库更改。 我曾尝试应用“$ scope。$ apply();”方法,但我收到错误消息“$ digest已在进行中”。
请帮助我,如何在ajax调用后刷新我的范围。
答案 0 :(得分:3)
您可以通过此服务使用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
});
}
答案 1 :(得分:1)
尝试$scope.$digest();
或使用$ http代替jQuery ajax或其他