Chr*_*ruS 8 javascript model-view-controller project-structure angularjs
我的app.js包含
var app = angular.module('myApp', []).
config(['$routeProvider', function ($routeProvider, $http) {
...
}]);
Run Code Online (Sandbox Code Playgroud)
服务看起来像
app.service('MyService', function () {
addNums = function (text) {
return text + "123";
}
});
Run Code Online (Sandbox Code Playgroud)
在控制器中我有
function adminCtrl ($scope, MyService) {
$scope.txt = MyService.addNums("abc");
};
Run Code Online (Sandbox Code Playgroud)
它们都在单独的文件中.问题是我收到了错误
Unknown provider: MyServiceProvider <- MyService
看起来我做错了什么.
Mar*_*cok 11
如果您忘记告诉Angular加载myApp模块,可能会发生提供程序错误.例如,你在index.html文件中有这个吗?:
<html ng-app="myApp">
Run Code Online (Sandbox Code Playgroud)
您的服务缺少"这个.":
this.addNums = function(text) {
Run Code Online (Sandbox Code Playgroud)
小提琴.
Angular社区似乎有很多关于何时使用service()vs factory()以及如何正确编码它们的混淆.那么,这是我的简短教程:
该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技术,例如将您的服务定义为coffeescript类.
此外,服务的未记录命名约定似乎是camelCase,首字母小写:例如,myService.
| 归档时间: |
|
| 查看次数: |
14650 次 |
| 最近记录: |