2013-11-14 127 views
0

我刚开始使用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/'); 
     }); 
    }; 
}); 
+0

真的需要调用API来重新加载所有数据吗?在删除/添加/更新请求之后如何处理本地数组和拼接/推送?很容易实现 – charlietfl

+0

我的担心是数组可能与db中实际发生的数据不同步。例如,如果我从数组中删除项目,但实际上并没有在数据库中删除。这是我应该关心的问题吗? –

+0

也,我正在建立这个应用程序和学习。我想知道*如何回答我的问题,即使我将来会重新使用内存数据模型。 –

回答

1

而不是通用服务,您可以有一个服务,更具体到您的项目,该服务可能包含模型(项目和任务)。当它在内部更新时,来自每个控制器的观察者将触发并更新他们的数据。

当你想在控制器之间共享模型时,模型应该保存在一个服务中,你应该使用getter和setter来访问它。

这个acticle使用Angular的老版本,但它会解释你如何使用服务作为你的模型。

http://onehungrymind.com/angularjs-sticky-notes-pt-1-architecture/

相关问题