小编典典

将模型数据和行为放在哪里?

all

我正在为我的最新项目使用 AngularJS。在文档和教程中,所有模型数据都放入控制器范围内。我知道必须有控制器可用,因此必须在相应的视图中可用。

但是我认为该模型实际上不应该在那里实施。例如,它可能很复杂并且具有私有属性。此外,人们可能希望在另一个上下文/应用程序中重用它。将所有内容都放入控制器完全破坏了
MVC 模式。

这同样适用于任何模型的行为。如果我要使用DCI
架构
并将行为与数据模型分开,我将不得不引入额外的对象来保存行为。这将通过引入角色和上下文来完成。

DCI == 数据协作交互 _ _

当然,模型数据和行为可以用普通的 javascript 对象或任何“类”模式来实现。但是 AngularJS 的方法是什么?使用服务?

所以归结为这个问题:

遵循 AngularJS 最佳实践,您如何实现与控制器分离的模型?


阅读 133

收藏
2022-04-04

共1个答案

小编典典

如果您想要多个控制器可以使用的东西,您应该使用服务。这是一个简单的人为示例:

myApp.factory('ListService', function() {
  var ListService = {};
  var list = [];
  ListService.getItem = function(index) { return list[index]; }
  ListService.addItem = function(item) { list.push(item); }
  ListService.removeItem = function(item) { list.splice(list.indexOf(item), 1) }
  ListService.size = function() { return list.length; }

  return ListService;
});

function Ctrl1($scope, ListService) {
  //Can add/remove/get items from shared list
}

function Ctrl2($scope, ListService) {
  //Can add/remove/get items from shared list
}
2022-04-04