我刚开始使用AngularJS。Angular - 从另一个控制器更新控制器数据
我有一个简单的CRUD应用程序,它与REST API进行通信。我有两个控制器,分别控制我的Projects
数据和Tasks
数据。在后端任务被父项目的外键所喜欢。所以当我删除Project
时,关联的Tasks
也被删除(这是我现在想要的功能)。
因此,除了当我删除一个项目我想重新加载任务列表时,一切工作。基本上在调用ConcernService.del('projects/', item)
后,我希望从API中刷新任务列表。我知道这应该通过ConcernsService
来处理,但我不确定最好的方法。
任何帮助将不胜感激。
// --- CONCERNS FACTORY --- //
concernsApp.factory('ConcernService', function ($http, $q) {
var api_url = "/path/to/api/";
var ConcernService = {
list: function (items_url) {
var defer = $q.defer();
$http({method: 'GET', url: api_url + items_url}).
success(function (data, status, headers, config) {
defer.resolve(data);
}).error(function (data, status, headers, config) {
defer.reject(status);
});
return defer.promise;
},
del: function(item_url, obj) {
return $http.delete(api_url + item_url + obj.id + '/');
},
};
return ConcernService;
});
// --- PROJECTS CONTROLLER --- //
concernsApp.controller('ProjectsCtrl', function ($scope, $http, ConcernService) {
// get all projects
$scope.projects = ConcernService.list('projects/');
// assign the delete method to the scope
$scope.deleteItem = function(item) {
ConcernService.del('projects/', item).then(function(){
// reload projects
$scope.projects = ConcernService.list('projects/');
});
};
});
// --- TASKS CONTROLLER --- //
concernsApp.controller('TasksCtrl', function ($scope, $http, ConcernService) {
// get all tasks
$scope.tasks = ConcernService.list('tasks/');
// assign the delete method to the scope
$scope.deleteItem = function(item) {
ConcernService.del('tasks/', item).then(function(){
// reload projects
$scope.tasks = ConcernService.list('tasks/');
});
};
});
真的需要调用API来重新加载所有数据吗?在删除/添加/更新请求之后如何处理本地数组和拼接/推送?很容易实现 – charlietfl
我的担心是数组可能与db中实际发生的数据不同步。例如,如果我从数组中删除项目,但实际上并没有在数据库中删除。这是我应该关心的问题吗? –
也,我正在建立这个应用程序和学习。我想知道*如何回答我的问题,即使我将来会重新使用内存数据模型。 –