provider是干啥的?
provider可以为应用提供通用的服务,形式可以是常量,也可以是对象。
比如我们在controller里常用的$http
就是AngularJS框架提供的provider
- myApp.controller(‘MainController', function($scope, $http) {
- $http.get(…)
- }
在上面的代码里,就可以直接使用$http
包好的各种功能了
provider
那我们自己想定制一个provider,怎么写呢
- //定义:
- $provide.provider('age', {
- start: 10,
- $get: function() {
- return this.start + 2;
- }
- });
- //或
- $provide.provider('age', function($filterProvider){
- this.start = 10;
- this.$get = function() {
- return this.start + 2;
- };
- });
- //调用:
- app.controller('MainCtrl', function($scope, age) {
- $scope.age = age; //12
- });
provider的基本原则就是通过实现$get
方法来在应用中注入单例,使用的时候拿到的age
就是$get
执行后的结果。 上面例子中的两种定义方法都可以
factory
- $provide.provider('myDate', {
- $get: function() {
- return new Date();
- }
- });
- //可以写成
- $provide.factory('myDate', function(){
- return new Date();
- });
- //调用:
- app.controller('MainCtrl', function($scope, myDate) {
- $scope.myDate = myDate; //current date
- });
直接第二个参数就是$get要对应的函数实现,代码简单了很多有没有?!
service
这时候我又来劲儿了,我不仅就想定义个$get
,里面我还就返回个new出来的已有js类,三哥service
闪亮登场
- $provide.provider('myDate', {
- $get: function() {
- return new Date();
- }
- });
- //可以写成
- $provide.factory('myDate', function(){
- return new Date();
- });
- //可以写成
- $provide.service('myDate', Date);
对于这种需求,代码更简洁了是不是