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