Angular(二)服務

一、服務的概念及聲明

1.在angular中,服務是作爲一種提供特定功能的方法而存在的,可以被其他程序調用。它是一個單例,可以是任意類型。一個服務在angular應用的生命週期內,只會被初始化一次,並被所有調用者所共享。
服務通過依賴注入的方式被調用
2.依賴注入的三種方式
(1).隱式注入:沒有明確的聲明,angular會默認參數名稱就是函數依賴,並使用$injector將這些參數注入到對象實例中。
在嚴格模式下,使用隱式注入會 報錯。如果對代碼進行壓縮,參數名稱就會被替換成簡單的字符,AngularJS找不到這些函數依賴將導致注入失敗。

angular.modular('myApp',[])
.controller('myController',function($scope) {})

(2).顯示注入:只需爲函數對象新增一個$inject屬性,值爲一個字符串數組,包含依賴的名稱。數組元素必須與注入參數的順序一一對應。

angular.module('myApp',[])
.controller('myController',myService);
myService.$inject = ['$scope','window'];
function myService() {}

(3).行內注入

angular。module(‘myAPP’,[])
.controller('myCtrl',['$scope',function($scope) {}]);

二、服務的註冊

1.provider
provider可以註冊一個可配置的服務,通過provider()方法註冊的服務必須要包含“get()provider get()發放返回的結果。如果provider有返回值,那它只能是this 或者 基本數據類型 或者是 具有 $get()發放的對象類型。

provider()發放利用config 函數來對服務進行配置(在對象啓動之前),config配置的只能是在$get()方法之外定義的變量,在注入config函數中時,參數名必須由 “服務名”+ Provider 的形式。

angular.module('myApp',[])
.provider('myServer',function() {
    this.$get() = function() { return ...}
})
.config(function(myServerProvider) {...})

2.factory()方法
factory方法註冊的服務是不可配置的,且必須要有返回值,它可以返回任意類型的值(基本數據類型或者對象類型),如果沒有返回值則會報錯。factory注入的結果就是return返回的結果,可以在被注入的對象中使用return的值

定義一個factory服務

angular.module('myApp',[])
.factory('myFactory',function() {
    return {
        name: 'name1'
        getInfo: function() {console.log(name);}
    }
});

在controller中注入服務

angular.module('myApp',[])
.controller('maCtrl',['$scope','myFactory',function($scope,myFactory) {
    maFactory.getInfo();
}])

3.service()方法
service方法創建的服務也是不可配置的,可以不需要返回任何值,因爲service本身就是一個構造器對象,系統會用 new 關鍵字創建一個對象(即以構造函數實例化的形式生成一個服務實例),因此可以再service的內部使用 this 關鍵字,對service進行擴展。如果service有返回值,則必須是一個對象,因爲如果返回一個基本類型,則相當於返回德爾還是this本身。

angular.module('myApp',[])
.service('myService'.function() {
this.info = 'infomation';
   this.getInfo = function() {
       return this.info;
   }
})
.controller('myCtrl',['$scope','myService',function($scope,myService) {
    $scope.info = myService.getInfo();
}])

參考文章:Angular服務深度剖析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章