DOM POST 后不再更新
DOM not updating after POST
在我的 Django+angular 应用程序中使用 https://github.com/blacklocus/angular-django-rest-resource 和我的 ng-repeat
在发出 'DELETE' 请求时正确更新,但不使用 '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 都保持不变。有任何想法吗?谢谢。
终于解决了这个问题。我正在使用 Angular Material,我的项目表单位于 material 对话框中,该对话框显然创建了一个隔离范围。我需要将当前范围分配为对话框的 属性,然后通过 属性.
引用模型
例如
$mdDialog.show({
controller: function(){this.parent = $scope;},
controllerAs: 'ctrl',
...
在我看来使用 ng-model: "ctrl.parent.newProject.project_name"
等等。
在我的 Django+angular 应用程序中使用 https://github.com/blacklocus/angular-django-rest-resource 和我的 ng-repeat
在发出 'DELETE' 请求时正确更新,但不使用 '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 都保持不变。有任何想法吗?谢谢。
终于解决了这个问题。我正在使用 Angular Material,我的项目表单位于 material 对话框中,该对话框显然创建了一个隔离范围。我需要将当前范围分配为对话框的 属性,然后通过 属性.
引用模型例如
$mdDialog.show({
controller: function(){this.parent = $scope;},
controllerAs: 'ctrl',
...
在我看来使用 ng-model: "ctrl.parent.newProject.project_name"
等等。