当前位置: 首页 > 知识库问答 >
问题:

模型数据和行为放在哪里?[TL;DR;使用服务]

杨起运
2023-03-14

我正在为我的最新项目与AngularJS合作。在文档和教程中,所有模型数据都被放入controller范围。我理解,必须在那里为控制器提供,从而在相应的视图中。

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

如何按照AngularJS的最佳实践实现与控制器解耦的模型?

共有1个答案

白越
2023-03-14

如果您想要多个控制器可用的东西,则应该使用服务。这里有一个简单的做作的例子:

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
}
 类似资料:
  • 问题内容: 我正在为最新项目使用AngularJS。在文档和教程中,所有模型数据都放入控制器范围。我知道控制器必须可用,因此必须在相应的视图内可用。 但是我不认为该模型应该在那里实际实施。它可能很复杂,并且具有私有属性。此外,可能要在另一个上下文/应用程序中重用它。将所有内容放入控制器完全破坏了MVC模式。 任何模型的行为都一样。如果我要使用DCI体系结构并将行为与数据模型分开,则必须引入其他对象

  • Tl;dr 是一个可以将注册各种网络服务时弹出的服务条款文件进行总结的 Chrome 扩展程序 灵感 如今,最终用户许可协议随处可见,但大多数时候这些协议和服务条款太长且充满行话,消费者难以阅读。Tl;dr 想要创造一个帮助消费者随时了解他们同意的内容以及公司如何使用他们的数据的工具。我们不能期望用户会为他们使用的每个产品阅读几十页的文本,但我们希望帮助用户能够防止无意中同意了可疑的隐私条款。 它

  • 问题内容: 我知道我可以读取使用这三个术语,但任何一个可以请指引我正确的时候使用从数据库中的数据,并? 问题答案: 何时使用ExecuteScalar :使用它来执行通常具有标量返回值的任何用户定义的函数或存储过程。即仅返回一个值。但是,它也可以与其他查询或存储过程一起使用,但是在这种情况下,它 仅 返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。 何时使用ExecuteReader :

  • 问题内容: 我的项目是这样的: 有人可以告诉我将hibernate.cfg.xml放在哪里吗? 因为出现此错误: 问题答案: 配置文件必须位于上。 根据您的项目,这可以通过不同的方式来完成。 对于 Web应用程序WAR 项目(您正在Servlet容器中运行程序):当应用程序在容器中运行时,将其放入将在类路径上可见的文件中起作用。 对于 Maven的 风格的项目(在Servlet容器没有运行该程序)

  • 问题内容: 首先,可能是我要问一些以前已经问过并回答过的问题,但我却无法找回搜索结果。一般而言(或到目前为止):)我们在服务层上定义事务注释,通常是Spring Hibernate Crud。 现在,我需要根据客户站点在域模型之间进行选择。假设客户端A使用我的域模型都很好,但是另一个客户端网站会给我一个Web服务而不是使用我们的域模型。 我应该替换哪一层。我认为必须是DAO,它将从Web服务获取我

  • 问题内容: 我有一个简单的导航对象设置,其中列出了导航项(以及它们是否应出现在主导航中)。看来,当我尝试将ng-if与ng- repeat混合使用时,情况会分崩离析,但是当我将ng-show与ng- repeat混合使用时,它可以正常工作(但是最后我得到了一堆隐藏的元素,但我没有想要附加到DOM)。 但是以下操作无效(请注意,现在是): 路线对象看起来像 尝试使用时收到以下错误: 错误:多个指令[