POST后{DOM}不更新DOM

时间:2015-09-28 13:53:51

标签: angularjs django ngresource

在我的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都会保持不变。有任何想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

终于解决了这个问题。我使用Angular Material,我的项目表单在一个材料对话框中,显然创建了一个隔离范围。我需要将当前范围指定为对话框的属性,然后通过该属性引用模型。

e.g。

$mdDialog.show({
    controller: function(){this.parent = $scope;},
    controllerAs: 'ctrl',
    ...

在我看来使用ng-model: "ctrl.parent.newProject.project_name"等等。