我正在与AngularJS合作完成我的最新项目.在文档和教程中,所有模型数据都放入控制器范围.我理解它必须在那里才能供控制器使用,从而在相应的视图中可用.

然而,我认为该模型实际上不应该在那里实现.例如,它可能很复杂,并且具有私有属性.此外,您可能希望在另一个上下文/应用程序中重用它.将所有东西都放到控制器中完全打破了MVC模式.

这同样适用于任何模型的行为.如果我使用DCI architecture并将行为与数据模型分开,我将不得不引入其他对象来保存行为.这将通过引入角色和上下文来实现.

DCI==Data Collaboration Iinteraction

当然,模型数据和行为可以用纯javascript对象或任何"类"模式来实现.但是,AngularJS会用什么方式来做到这一点呢?使用服务?

So it comes down to this question:

按照AngularJS的最佳实践,如何实现与控制器分离的模型?

推荐答案

如果你想让多个控制器都能使用,你应该使用服务.下面是一个简单的人为例子:

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
}

Javascript相关问答推荐

为什么getRecord()会因为与_logger相关的错误而失败?(使用Hedera SDK)

在分区内迭代分区

扫描qr code后出错whatter—web.js

MathJax可以导入本地HTML文档使用的JS文件吗?

在拖放时阻止文件打开

JS,当你点击卡片下方的绿色空间,而它是在它的背后转动时,

Ember.js 5.4更新会话存储时如何更新组件变量

我可以使用使用node.js创建的本地主机来存储我网站上提交的所有数据吗?没有SQL或任何数据库.只有HTML语言

覆盖TypeScrip中的Lit-Element子类的属性类型

连接到游戏的玩家不会在浏览器在线游戏中呈现

在使用位板时,如何在Java脚本中判断Connect 4板中中柱的对称性?

使用VUE和SCSS的数字滚动动画(&;内容生成)

为什么JPG图像不能在VITE中导入以进行react ?

传递方法VS泛型对象VS事件特定对象

React:防止useContext重新渲染整个应用程序或在组件之间共享数据而不重新渲染所有组件

react -原生向量-图标笔划宽度

使用Reaction窗体挂钩注册日历组件

Jexl to LowerCase()和Replace()

我无法在Api Reaction本机上发出GET请求

如何处理不带参数的redux thunk payloadCreator回调函数?