使用es6模块的角度服务是否有意义?

时间:2016-01-12 15:35:49

标签: javascript angularjs angular-services

使用ES6模块时使用角度服务是否有意义?例如,我们的代码中需要一个单例模块(userService),我们可以这样做:

var app = angular.module('app', []);

app.service('userService', function(){
    this.users = ['John', 'James', 'Jake'];
});

app.controller('FooController', ['$scope', 'userService', function($scope, userService){

    console.log(userService);

}]);

但我们可以在单独的文件中定义服务:

/* ./user-service.js */
export default users = ['John', 'James', 'Jake'];

,然后像这样编写代码:

var app = angular.module('app', []);

var userService = require('./user-service')    

app.controller('FooController', ['$scope', function($scope){

    console.log(userService);

}]);

和结果将与使用的服务完全相同。那么为什么在我们可以使用模块时使用角度服务?

2 个答案:

答案 0 :(得分:2)

是的!这很有道理。

服务在您的应用程序中实现特定的责任,在数据存储和视图之间移动数据。

模块允许您组织代码并分离具有不同职责的部分。

通过将每个服务放入模块,您可以更轻松地浏览和测试代码。很容易找到实现责任的所有代码。

答案 1 :(得分:1)

资料来源:Difference between service, directive and module =)

来自我自己的personal notes(主要是来自文档,谷歌小组帖子和SO帖子的片段):

<强>模块

  • 提供命名空间/分组服务,指令,过滤器,配置信息和初始化代码的方法
  • 帮助避免全局变量
  • 用于配置$ injector,允许将模块(或整个模块本身)定义的内容注入其他地方(依赖注入内容)
  • Angular模块与CommonJS或Require.js无关。与AMD或Require.js模块相反,Angular模块不会尝试解决脚本加载排序或延迟脚本提取的问题。这些目标是正交的,两个模块系统可以并存并实现其目标(因此文档声称)。

<强>服务

  • 是单身人士,因此您定义的每项服务只有一个实例。作为单身人士,他们不受范围的影响,因此可以通过(共享)多个视图/控制器/指令/其他服务来访问
  • 您可以(也可能应该)在何时创建自定义服务
    • 两件或两件以上的东西需要访问相同的数据(不要使用根作用域),或者只是想整齐地封装数据
    • 您希望封装与Web服务器的交互(在服务中扩展$ resource或$ http)
  • 内置服务以&#39; $&#39;。
  • 开头
  • 要使用服务,需要依赖注入(例如,在控制器或其他服务或指令上)。

指令(下面的一些项目基本上都是相同的,但我发现有时候略有不同的措辞有很大帮助)

  • 负责在模型状态发生变化时更新DOM
  • 扩展HTML词汇=教HTML新技巧。
    Angular带有一组内置指令(例如,ng- * stuff),这些指令对于构建Web应用程序很有用,但是您可以添加自己的指令,以便将HTML转换为声明性域特定语言(DSL)。例如,&lt; tabs&gt;和&lt; pane&gt; Angular主页演示中的元素&#34;创建组件&#34;。
    • 非明显的内置指令(因为它们不以&#34; ng&#34;开头):a,form,input,script,select,textarea。在Angular下,这些都比平常更多!
  • 指令允许您对HTML&#34;进行组件化。指令通常比ng-include更好。例如,当你开始编写大量主要是数据绑定的HTML时,将HTML重构为(可重用)指令。
  • Angular编译器允许您将行为附加到任何HTML元素或属性,甚至可以使用自定义行为创建新的HTML元素或属性。 Angular将这些行为扩展称为指令
    • 当你把它全部烧掉时,一个指令只是一个在Angular编译器在DOM中遇到它时执行的函数。
  • 指令是一种行为或DOM转换,它由注释中存在的属性,元素名称,类名或名称触发。指令是在(HTML)编译过程中遇到特定HTML构造时应触发的行为。指令可以放在元素名称,属性,类名以及注释中。
    • 大多数指令仅限于属性。例如,DoubleClick仅使用自定义属性指令。
  • 另见What is an angularjs directive?

在模块中定义和分组Angular事物(依赖注入事物) 在服务中共享数据并包装Web服务器交互 扩展HTML并在指令中执行DOM操作 并使控制器成为&#34;瘦&#34;尽可能。