angularJS 自定義服務


 

3種創建自定義服務的方式。

    1. Factory
    2. Service
    3. Provider

在自定義服務里注入服務示例,但不能注入$scope作用域對象。

factory

factory方式創建的服務,作用就是返回一個有屬性有方法的對象。相當於:var f = myFactory();

//創建模型
    var app = angular.module('myApp', []);
//通過工廠模式創建自定義服務 app.factory('myFactory', function() { var service = {};//定義一個Object對象' service.name = "張三"; var age;//定義一個私有化的變量 //對私有屬性寫getter和setter方法 service.setAge = function(newAge){ age = newAge; } service.getAge = function(){ return age; } return service;//返回這個Object對象 }); //創建控制器 回調函數把自定義服務return的對象作為參數傳入 可以把他的值作為$scope的一個屬性 用於view中 app.controller('myCtrl', function($scope, myFactory) { myFactory.setAge(20); $scope.r =myFactory.getAge(); alert(myFactory.name); });

 

service

通過service方式創建自定義服務,相當於new的一個對象:var s = new myService();,只要把屬性和方法添加到this上才可以在controller里調用。

<div ng-app="myApp" ng-controller="myCtrl">
    <h1>{{r}}</h1>
</div>
<script>
    var app = angular.module('myApp', []);

    app.service('myService', function($http,$q) {
        this.name = "service";
        this.myFunc = function (x) {
            return x.toString(16);//轉16進制
        }
        this.getData = function(){
            var d = $q.defer();
            $http.get("ursl")//讀取數據的函數。
                .success(function(response) {
                d.resolve(response);
            })
                .error(function(){
                alert(0)
                d.reject("error");
            });
            return d.promise;
        }
    });
    app.controller('myCtrl', function($scope, myService) {
        $scope.r = myService.myFunc(255);
        myService.getData().then(function(data){
            console.log(data);//正確時走這兒
        },function(data){
            alert(data)//錯誤時走這兒
        });
    });
</script>

 

provder

只有provder是能傳 .config() 函數的 service。如果想在 service 對象啟用之前,先進行模塊范圍的配置,那就應該選擇 provider。需要注意的是:在config函數里注入provider時,名字應該是:providerName+Provider.
使用Provider的優點就是,你可以在Provider對象傳遞到應用程序的其他部分之前在app.config函數中對其進行修改。
當你使用Provider創建一個service時,唯一的可以在你的控制器中訪問的屬性和方法是通過$get()函數返回內容

<body>
<div ng-app="myApp" ng-controller="myCtrl">
</div>

<script>
    var app = angular.module('myApp', []);

    //需要注意的是:在注入provider時,名字應該是:providerName+Provider   
    app.config(function(myProviderProvider){
        myProviderProvider.setName("大聖");       
    });
    app.provider('myProvider', function() {
        var name="";
        var test={"a":1,"b":2};
        //注意的是,setter方法必須是(set+變量首字母大寫)格式
        this.setName = function(newName){
            name = newName  
        }

        this.$get =function($http,$q){
            return {
                getData : function(){
                    var d = $q.defer();
                    $http.get("url")//讀取數據的函數。
                        .success(function(response) {
                            d.resolve(response);
                        })
                        .error(function(){
                            d.reject("error");
                        });
                    return d.promise;
                },
                "lastName":name,
                "test":test
            }   
        }

    });
    app.controller('myCtrl', function($scope,myProvider) {
        alert(myProvider.lastName);
        alert(myProvider.test.a)
        myProvider.getData().then(function(data){
            //alert(data)
        },function(data){
            //alert(data)
        });
    });
</script>
</body>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM