3種方法實現AngularJs自定義服務

我們可以通過factoryservicevalue這三種方式來自定義服務。

自定義服務與我們之前學的自定義指令和自定義過濾器是一樣的,都是通過調用不同的方法進行自定義服務的。下面通過factory來自定義一個格式化字符串的例子,來看一下具體的過程。

  • factory自定義服務

首先先初始化定義一個模塊:
var service = angular.module('service',[]);
接下來通過service來調用factory方法實現自定義服務,里面有兩個參數,第一個參數為自定義服務的名稱,第二個參數為一個數組,回掉函數,在這里需要return一個函數或對象:

service.factory('format',['$filter',function ($filter) {
//自定義服務,單依賴于$filter

//自定義服務的具體功能
          return function (arg) {
              var str = '';
              for(var key in arg){
                  str += key + '='+arg[key] +'&';
              }
              str = str.slice(0,-1);
              return str;
          }
    }]);

定義好服務之后就可以在控制器中調用了,調用的方法還是和內置服務一樣,需要參數,只不過自定義的服務在調用的時候不需要加“$”符號:

service.controller('DemoController',['$scope','$http','format',function ($scope,$http,format) {
        var data = {
            name:"張三",
            age:10
        };
//      將格式化后的字符串打印出來
        console.log(format(data));
    }]);
Paste_Image.png
  • service自定義服務

同樣的,在這用一個demo來演示service自定義的服務,同樣的先定義一個模塊,然后調用service方法,定義好具體功能后,在控制器中調用,下面用service來定義一個格式化時間的服務,里面有兩個參數,第一個參數為自定義服務的名稱,第二個參數為一個數組,回掉函數:

<script>
        var App = angular.module('App', []);
        // 自定義服務顯示日期
        App.service('showTime', ['$filter', function($filter) {
            var now = new Date();
            var date = $filter('date');
        //向對象上添加具體的方法
            this.now = date(now, 'y-M-d H:mm:ss');
        //向對象上添加具體的方法
            this.sayHello = function(){
                alert("你好");
            }
        }]);
        App.controller('DemoController', ['$scope', 'showTime', function($scope, showTime) {
            $scope.now = showTime.now;
            showTime.sayHello();
        }])

    </script>


Paste_Image.png

Paste_Image.png

這個跟我們之前那就不一樣了,之前要么返回一個函數或者一個對象,我們在使用factory的 時候需要顯示的去return一個函數或對象,在service這我們不用返回對象,只要一個this就可以了,我們知道this也是一個對象,我們return回去的也是一個對象,我們需要增加函數功能的時候只需要在后面你添加this.函數名和方法體就可以了,比如上面格式化時間的哪個demo,就有兩個功能:格式化時間和彈出“你好”。

  • value自定義服務

value來定義服務的時候,特別簡單,沒有factory,service那么復雜,它只能定義單一的服務,不像factory,service既可以定義函數又可以定義對象,而value是自定義常量的服務,類似于(key,value)這種形式,同樣的有兩個參數,第一個服務的名稱,第二個就是所對應的值(只對于value服務來說)。

  service.value("author",'張三');
   service.controller('DemoController',['$scope','$http','format','author',function ($scope,$http,format,author) {
        $scope.author = author;
    }]);
  <div ng-controller="DemoController">
            <li>{{author}}</li>
  </div>
Paste_Image.png

value本質上是一個服務,但是從表現形式上看是一個常量。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評論 25 708
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 10.1長假最后一天,來到外灘,避開主干道擁擠的人群,方向來一張,自己極其喜歡左右對比的色溫,ip7+,snaps...
    455AC閱讀 636評論 0 51
  • 此路從何至,逶迤上碧天。穿云騰翠嶺,展翅嘯長川。八面通途接,多方繹訊傳。一枝雄筆縱,潑墨畫群賢。
    高十一妹閱讀 528評論 6 27