中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

AngularJS中自定義服務的示例分析

發布時間:2021-08-04 14:13:01 來源:億速云 閱讀:131 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關AngularJS中自定義服務的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

前言

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

  1. Factory

  2. Service

  3. Provider

2、大家應該知道,AngularJS是后臺人員在工作之余發明的,他主要應用了后臺早就存在的分層思想。所以我們得了解下分層的作用,如果你是前端人員不了解什么是分層,那么你最好問問你后臺的小伙伴。

dao層:就是Model層,在后臺時,這一層的作用,就要是寫與數據庫交互數據的一層,在angularJS里就主要是寫ajax的。

service層:主查寫邏輯代碼的,但在angularJS里也可以持久化數據(充當數據容器),以供不同的controller高用。

controller層:即控制層,在angularJS里就是寫控制器的。控制器里盡量不要寫那些不必要的邏輯,盡量寫在service層里。
所以,就有了創建自定義服務的三種方式。

factory

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

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
  <p>{{r}}</p>
</div>

<script>
  //創建模型
  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對象
  });
  //創建控制器
  app.controller('myCtrl', function($scope, myFactory) {
    myFactory.setAge(20);
    $scope.r =myFactory.getAge();
    alert(myFactory.name);
  });
</script>
</body>
</html>

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

<script>
  var app = angular.module('myApp', []);
  app.factory('myFactory', function($http,$q) {
    var service = {};
    service.name = "張三";
    //請求數據
    service.getData = function(){
      var d = $q.defer();
      $http.get("url")//讀取數據的函數。
      .success(function(response) {
        d.resolve(response);
      })
      .error(function(){
        d.reject("error");
      });
      return d.promise;
    }    
    return service;
  });
  app.controller('myCtrl', function($scope, myFactory) {
    //alert(myFactory.name);
    myFactory.getData().then(function(data){
      console.log(data);//正確時走這兒
    },function(data){
      alert(data)//錯誤時走這兒
    });;
  });
</script>

service

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

<div ng-app="myApp" ng-controller="myCtrl">
  <h2>{{r}}</h2>
</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>

3.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>

4.在過濾器中注入自定義服務

<body>
<div ng-app="myApp">
  在過濾器中使用服務:
  <h2>{{255 | myFormat}}</h2>
</div>

<script>
  var app = angular.module('myApp', []);
  app.service('hexafy', function() {
    this.myFunc = function (x) {
      return x.toString(16);
    }
  });
  app.filter('myFormat',['hexafy', function(hexafy) {
    return function(x) {
      return hexafy.myFunc(x);
    };
  }]);
</script>
</body>

關于“AngularJS中自定義服務的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南澳县| 乐业县| 浮梁县| 乐东| 灵川县| 彭泽县| 崇文区| 甘泉县| 梅河口市| 泽库县| 报价| 滁州市| 德昌县| 土默特左旗| 鄂温| 山西省| 德化县| 玉林市| 铜川市| 湾仔区| 保德县| 华池县| 荥经县| 昂仁县| 衡阳县| 临海市| 泽州县| 陕西省| 萍乡市| 视频| 麟游县| 婺源县| 旅游| 宁化县| 洛浦县| 太和县| 民勤县| 无极县| 长乐市| 两当县| 连南|