在我的Django + angular app中使用https://github.com/blacklocus/angular-django-rest-resource,在发出'DELETE'请求时正确更新我的ng-repeat
,但没有使用'POST'
相关控制器代码:
var Project = djResource('api/projects/:id', {'id': "@id"});
$scope.projects = Project.query();
$scope.newProject = new Project;
$scope.createProject = function(){
apiSrv.request('POST', 'projects/', $scope.newProject,
function(data){
$scope.projects = Project.query();
},
function(err){
$log.error(err);
}
);
};
$scope.deleteProject = function(id){
apiSrv.request('DELETE', 'projects/'+id, {},
function(data){
$scope.projects = Project.query();
},
function(err){
$log.error(err);
}
);
};
相关服务代码:
.factory('apiSrv', ['$http', function($http){
var apiSrv = {};
apiSrv.request = function(method, url, args, successFn, errorFn){
return $http({
method: method,
url: '/api/' + url,
data: JSON.stringify(args)
}).success(successFn).error(errorFn);
};
return apiSrv;
}]);
我在POST回调期间尝试调用$scope.$apply();
。还尝试了$scope.projects.push(project);
。
我也试过
$scope.newProject.$save(function(data){
$scope.projects = Project.query();
});
与$ save回调中的$scope.projects.push(project);
和$scope.$apply();
以及我尝试过的任何内容都不会更新DOM。它在deleteProject
函数中工作正常,DOM更新以显示$ scope.projects的更新状态。添加$log.info($scope.projects);
会列出所有新添加的项目,但无论我做什么,DOM都会保持不变。有任何想法吗?感谢。
答案 0 :(得分:0)
终于解决了这个问题。我使用Angular Material,我的项目表单在一个材料对话框中,显然创建了一个隔离范围。我需要将当前范围指定为对话框的属性,然后通过该属性引用模型。
e.g。
$mdDialog.show({
controller: function(){this.parent = $scope;},
controllerAs: 'ctrl',
...
在我看来使用ng-model: "ctrl.parent.newProject.project_name"
等等。