我目前有一个看起来像这样的工厂:
ChecklistApp.factory('Api', ['$resource', function ($resource) {
return {
Checklists: $resource('api/checklists', {}, { 'query': { method: 'GET', isArray: false } }),
Checklist: $resource('api/checklist', {}, { 'query': { method: 'GET', isArray: false } }),
AddChecklist: $resource('api/addchecklist', {}, { 'query': { method: 'POST' } }),
UpdateChecklist: $resource('api/updatechecklist', {}, { 'query': { method: 'PUT' } })
};
}]);
我有两个使用这个工厂的控制器 列表控制器 - 列出所有清单 更新控制器 - 显示一个清单并允许其详细修改
列表控制器将数据分配给变量,而变量又绑定到UI,如下所示:
$scope.search = function () {
Api.Checklists.query({ Name: $scope.searchName },
function (data) {
$scope.checklists = data.checklists;
}
);
};
在我的编辑控制器中,我有以下更新功能,它可以成功更新数据库中的数据并将用户返回到主页(列表)页面。
var EditCtrl = function ($scope, $location, $routeParams, Api) {
$scope.action = "Update";
var id = $routeParams.editId.replace(/\D+/, '');
Api.Checklist.query({ id: id },
function (qd) { $scope.item = qd.checklist; }
);
$scope.update = function () {
Api.UpdateChecklist.save({ Id: $scope.item.id, Name: $scope.item.name },
function (data) {
$scope.item = data.checklist[0];
$scope.$apply();
$location.path('/#'); //Return to list controller
}
);
}
我的问题是,在我的编辑控制器中修改数据后,我导航回列表控件,虽然它在javascript中遇到搜索查询,但它没有在第二次调用时点击服务端点(完全跳过它)并且数据未刷新(因此修改后的核对表已在DB上更新,但在列表控件的视图中保持不变)。
所以我的问题是 如何使用最初加载数据运行的相同查询从数据库再次强制加载数据(列表控件中的$ scope.search>>为什么在页面第二次导航时跳过此操作?和/或另外还有一种更好的方法来在多个控制器上共享集合(我读到了嵌套作用域并将集合放在父作用域中,两个控制器都可以访问它但不确定这是最佳实践还是合适的解决方案?)
由于