如果您忘记告诉 Angular 加载 myApp 模块,则可能会发生提供程序错误。例如,您的index.html 文件中是否有此内容?:
<html ng-app="myApp">
您的服务缺少“这个”:
this.addNums = function(text) {
Fiddle http://jsfiddle.net/mrajcok/V3EvS/.
Angular 社区似乎对何时使用 service() 与factory() 以及如何正确编码它们存在很多困惑。所以,这是我的简短教程:
The 服务()方法 http://docs.angularjs.org/api/angular.Module#service期望一个JavaScript 构造函数 http://www.javascriptkit.com/javatutors/oopjs2.shtml。许多使用 service() 的 Angular 代码示例都包含非构造函数的代码。通常,它们会返回一个对象,这违背了使用 service() 的目的——更多内容见下文。如果需要创建并返回一个对象,则可以使用factory()来代替。通常,只需要构造函数即可,并且可以使用 service() 。
下面的引用来自不同的 AngularJS Google 群组帖子:
使用factory()与service()之间的主要区别在于factory()
必须返回一个对象,而 service() 除了它之外不返回任何东西
必须是对象构造函数。
如果您提供的函数构建了您想要的对象,请使用factory()
想。即,Angular 本质上会做
obj = myFactory()
获取对象。如果您提供的功能是,请使用 service()
您想要的对象的构造函数。即,Angular 本质上会做
obj = 新的 myService()
获取/实例化 obj。
因此,当人们使用 service() 及其代码“返回”一个对象时,由于 JavaScript“new”的工作方式,这有点浪费:“new”将首先创建一个全新的 JavaScript 对象(然后使用原型做一些事情) ,然后调用 myService() 定义的函数等——这里我们并不真正关心细节),但是因为 myService() 定义的函数返回它自己的对象,所以“new”做了一些奇怪的事情:丢弃刚刚花费时间创建的对象并返回 myService() 函数创建的对象,因此是“浪费”。
引入 service() 的原因之一是为了让它变得简单
使用“经典”OO 技术,例如将您的服务定义为
咖啡脚本类。
此外,未记录的服务命名约定似乎是首字母小写的驼峰命名法:g.、myService。