AngularJS服务的目的

时间:2013-11-16 13:37:09

标签: angularjs angularjs-service

我是AngularJS的新手。我目前正在查看services。其中一些服务看起来像JavaScript中已有的替换功能。例如,$timeout service。为什么AngularJS有这些服务?有技术原因吗?这种方法有什么好处吗?我只是不明白使用这些服务的必要性。

感谢您的帮助。

4 个答案:

答案 0 :(得分:7)

服务是一个函数或一个对象,带有一组方法,可以由应用程序的几个组件(控制器,指令,过滤器,其他服务)使用。

$timeout$window这样的“包装”服务的主要优势在于它们的全局函数等效于它们是由Angular注入的,因此可以在单元测试中进行模拟,即替换为假实施。

阅读角度文档中有关dependency injection的章节。特别是关于$timeout服务,其文档解释了除了本地setTimeout()函数之外的其他功能。

答案 1 :(得分:2)

服务是一种在应用程序上存储持久信息的方法。 与$ scope不同,$ scope是每个路由\控制器的$ rootScope的新子节点。

Angular特定实现已经存在的函数的目的是通过自动告知angular注册您的更改,并在下一个$ digest迭代中将它们应用到当前作用域,使您的生活和工作更轻松。

我很乐意解决任何其他问题。

祝Angular好运! :)

我现在将创建一个示例插件来强调你的想法

更新: 这是plunker: http://plnkr.co/edit/mVmhZpEdsZDQ0MUQpFJ7?p=preview

我使用了ng-change和原生更改 keyup事件解释了这一点。

虽然使用ng-change指令中内置的角度不需要额外的工作或代码,但使用本机事件需要将所有内容包装在范围内。$ apply function / 调用范围。$ digest手动。 (运行代码并亲自查看)

答案 2 :(得分:2)

Angular使用脏检查 - 它跟踪应该自动更新的所有变量,并且在任何更改的情况下根据需要多次迭代它们(因为观察变量之间可能存在相互依赖性)。 (确切地说,如果迭代次数太多,则可能是您的代码出现错误而引发异常)。

$timeout背后的主要原因是向Angular引擎发出信号,表示您将对回调中的观察变量进行一些更改。如果您要调用正常超时,可以通过调用例如方式通知Angular有关这些更改的方法。 $scope.$apply(function() {...})

另一个重要原因,正如@JB Nizet所说,mocking更容易。

答案 3 :(得分:0)

查看这个旧的答案,其中包括服务,提供商和工厂。

AngularJS: Service vs provider vs factory