AngularJS中的Provider们:Service和Factory等的区别
看了很多文章可能还是不太说得出 下文中泛指统一用中文,英文即为特指 供应商==>泛指provider
服务==>泛指service
provider==>provider()方法创建的东东
service==>service()方法创建的东东
先说说供应商($provide) 上面的描述是官方wiki的翻译版,如果有些绕的话,看下这张图:
下面是一个例子: myMod.config(function($provide) {
$provide.provider('greeting',function() {
this.$get = function() {
return function(name) {
alert("Hello," + name);
};
};
});
});
这个例子可以说是最终形态,先大概看下 定义供应商的方法们AngularJS用
Constant 定义常量用的,这货定义的值当然就不能被改变,它可以被注入到任何地方,但是不能被装饰器( var app = angular.module('app',[]);
app.config(function ($provide.constant('movieTitle','The Matrix');
});
app.controller('ctrl',0)">function (movieTitle) {
expect(movieTitle).toEqual('The Matrix');
});
语法糖: app.constant('The Matrix');
Value 这货可以是 $provide.value('The Matrix')
});
app.controller('The Matrix');
})
语法糖: app.value('The Matrix');
Service 它是一个可注入的构造器,在 $provide.service('movie',0)">function () {
this.title = 'The Matrix';
});
});
app.controller(function (movie) {
expect(movie.title).toEqual( 语法糖:
在 Factory 它是一个可注入的 $provide.factory(function () {
return {
title: 'The Matrix';
}
});
});
app.controller(app.factory(return {
title: 'The Matrix';
}
});
factory可以返回任何东西,它实际上是一个只有 Providerprovider是他们的老大,上面的几乎(除了 var version;
return {
setVersion: function (value) {
version = value;
},$get: function () {
return {
title: 'The Matrix' + ' ' + version
}
}
}
});
app.config(function (movieProvider) {
movieProvider.setVersion('Reloaded');
});
app.controller('The Matrix Reloaded');
});
注意这里 Decorator 这个比较特殊,它不是 'The Matrix');
app.config($provide.decorator($delegate) {
return $delegate + ' - starring Keanu Reeves';
});
});
app.controller('myController',152)">'The Matrix - starring Keanu Reeves');
});
总结
最后来看一张对比图:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |