我遇到了一个非常具体的问题,我想知道有人可以帮我解决。
所以,我有一个部门控制器,它可以加载一个mongodb集合并将其显示在带有ng-repeat的表格中。每个文档都有一个"编辑"链接修改自己。编辑链接打开一个模式框,它是一个不同的控制器。我从模态控制器发出PUT请求并成功更新我服务器上的文档。
问题是,当我离开模态框时,我的页面会显示旧数据,直到我刷新页面。有没有办法去观看" ng-repeat区域中的特定文档行。我想确保在不同控制器的更新操作之后立即修改特定行。我发现已经有效的解决方案是重新加载整个页面& controller(以便整个集合将使用GET重新加载,但这将使用额外的资源,似乎不是解决它的正确方法)。
这是简化的代码(我已经评论了我认为应该发生变化的地方):
department.html:
<tr dir-paginate="department in departments">
<td>{{department.id}}</td>
<td>{{department.name}}</td>
<td>{{department.office}}</td>
<td>{{department.phone}}</td>
<td> <a href="#" ng-Click="modifyDept(department)"> Edit </a> </td>
</tr
departmentController:
$http({
method: 'GET',
url: '/departments'
}).success(function(data, status, headers, config) {
$scope.departments = data;
})
.error(function(data, status, headers, config) {
console.log(" Not Doneee "+ status+data+headers+config);
});
//I was wondering if I could set up a watch in modifyDept?? The modalInstance however creates a new modal with separate controller.
$scope.modifyDept = function (depID){
var modalInstance = $uibModal.open({
templateUrl: 'partials/deptModal.html',
controller: 'deptModalController',
resolve: {
depID: function () {
return depID;
}
}
});
};
modalController for&#39; partials / deptModal.html&#39;:
$scope.newID = angular.copy(depID);
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
$scope.modify = function () {
$http({
method: 'PUT',
url: '/departments',
headers: {
'Content-Type': 'application/json'
},
data: {
newID: $scope.newID
}
}).success(function(data, status, headers, config) {
$uibModalInstance.dismiss('cancel');
if (status === 200) {
// I believe something could also be done here to notify the parent controller (departmentController) maybe via a service?
notificationFactory.info("Successfully updated: "+$scope.newID.name)
}
})
.error(function(data, status, headers, config) {
$uibModalInstance.dismiss('cancel');
notificationFactory.error("Error: Status Code "+status+". Contact admin if issue persists.")
});
};
这是我第一次使用棱角分明,我有预感,我应该使用$ watch&amp;工厂/服务,但只是不知道如何..任何提示或建议将不胜感激。
答案 0 :(得分:0)
添加范围:$ scope到部门控制器中$ uibModal.open方法中传递的选项,
departmentController:
$scope.modifyDept = function (depID){
var modalInstance = $uibModal.open({
templateUrl: 'partials/deptModal.html',
controller: 'deptModalController',
scope: $scope,
resolve: {
depID: function () {
return depID;
}
}
});
};
现在您可以访问modalController中departmentController的范围。在$ scope.modify方法的成功回调中,您可以使用新值更新$ scope.departments中的部门。