最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AngularJS之自定義服務(wù)詳解(factory、service、provider)

 更新時間:2017年04月14日 09:03:16   作者:zcl_love_wx  
本篇文章主要介紹了AngularJS之自定義服務(wù)詳解(factory、service、provider),具有一定的參考價值,感興趣的小伙伴們可以參考一下。

前言

1、3種創(chuàng)建自定義服務(wù)的方式。

  1. Factory
  2. Service
  3. Provider

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

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

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

controller層:即控制層,在angularJS里就是寫控制器的??刂破骼锉M量不要寫那些不必要的邏輯,盡量寫在service層里。
所以,就有了創(chuàng)建自定義服務(wù)的三種方式。

factory

factory方式創(chuàng)建的服務(wù),作用就是返回一個有屬性有方法的對象。相當(dāng)于: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>
  //創(chuàng)建模型
  var app = angular.module('myApp', []);

  //通過工廠模式創(chuàng)建自定義服務(wù)
  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對象
  });
  //創(chuàng)建控制器
  app.controller('myCtrl', function($scope, myFactory) {
    myFactory.setAge(20);
    $scope.r =myFactory.getAge();
    alert(myFactory.name);
  });
</script>
</body>
</html>

在自定義服務(wù)里注入服務(wù)示例,但不能注入$scope作用域?qū)ο蟆?/p>

<script>
  var app = angular.module('myApp', []);
  app.factory('myFactory', function($http,$q) {
    var service = {};
    service.name = "張三";
    //請求數(shù)據(jù)
    service.getData = function(){
      var d = $q.defer();
      $http.get("url")//讀取數(shù)據(jù)的函數(shù)。
      .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方式創(chuàng)建自定義服務(wù),相當(dāng)于new的一個對象:var s = new myService();,只要把屬性和方法添加到this上才可以在controller里調(diào)用。

<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);//轉(zhuǎn)16進制
    }
    this.getData = function(){
      var d = $q.defer();
      $http.get("ursl")//讀取數(shù)據(jù)的函數(shù)。
        .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() 函數(shù)的 service。如果想在 service 對象啟用之前,先進行模塊范圍的配置,那就應(yīng)該選擇 provider。需要注意的是:在config函數(shù)里注入provider時,名字應(yīng)該是:providerName+Provider.
使用Provider的優(yōu)點就是,你可以在Provider對象傳遞到應(yīng)用程序的其他部分之前在app.config函數(shù)中對其進行修改。

當(dāng)你使用Provider創(chuàng)建一個service時,唯一的可以在你的控制器中訪問的屬性和方法是通過$get()函數(shù)返回內(nèi)容。

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

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

  //需要注意的是:在注入provider時,名字應(yīng)該是: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")//讀取數(shù)據(jù)的函數(shù)。
            .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.在過濾器中注入自定義服務(wù)

<body>
<div ng-app="myApp">
  在過濾器中使用服務(wù):
  <h1>{{255 | myFormat}}</h1>
</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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • AngularJS延遲加載html template

    AngularJS延遲加載html template

    這篇文章主要介紹了AngularJS延遲加載html template 的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • AngularJS Phonecat實例講解

    AngularJS Phonecat實例講解

    這篇文章主要為大家詳細(xì)介紹了AngularJS Phonecat實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 發(fā)布Angular應(yīng)用至生產(chǎn)環(huán)境的方法

    發(fā)布Angular應(yīng)用至生產(chǎn)環(huán)境的方法

    這篇文章主要介紹了發(fā)布Angular應(yīng)用至生產(chǎn)環(huán)境的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Angular.js中ng-if、ng-show和ng-hide的區(qū)別介紹

    Angular.js中ng-if、ng-show和ng-hide的區(qū)別介紹

    angularJS中的ng-show、ng-hide、ng-if指令都可以用來控制dom元素的顯示或隱藏。那么這篇文章就給大家主要介紹了Angular.js中ng-if、ng-show和ng-hide的區(qū)別,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • angular 未登錄狀態(tài)攔截路由跳轉(zhuǎn)的方法

    angular 未登錄狀態(tài)攔截路由跳轉(zhuǎn)的方法

    今天小編就為大家分享一篇angular 未登錄狀態(tài)攔截路由跳轉(zhuǎn)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Angular之toDoList的實現(xiàn)代碼示例

    Angular之toDoList的實現(xiàn)代碼示例

    本篇文章主要介紹了Angular之toDoList的實現(xiàn)代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Angularjs 創(chuàng)建可復(fù)用組件實例代碼

    Angularjs 創(chuàng)建可復(fù)用組件實例代碼

    這篇文章主要介紹了Angularjs 創(chuàng)建可復(fù)用組件實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Angular CLI在Angular項目中如何使用scss詳解

    Angular CLI在Angular項目中如何使用scss詳解

    angular-cli自身支持Scss預(yù)處理器,Scss比css更加方便靈活,而且層次清晰,代碼整潔。下面這篇文章主要給大家介紹了關(guān)于Angular CLI在Angular項目中如何使用scss的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • AngularJs Forms詳解及簡單示例

    AngularJs Forms詳解及簡單示例

    本文主要介紹AngularJs Forms,這里整理了相關(guān)資料及簡單示例代碼,有需要的朋友可以參考下
    2016-09-09
  • AngularJS監(jiān)聽路由的變化示例代碼

    AngularJS監(jiān)聽路由的變化示例代碼

    這篇文章給大家分享了如何利用AngularJS監(jiān)聽路由的變化,文中給出了示例代碼相信對大家的理解很有幫助,有需要的朋友們可以參考借鑒。
    2016-09-09

最新評論

巩义市| 黄浦区| 商河县| 彭水| 十堰市| 曲松县| 同德县| 昌平区| 康保县| 青龙| 吕梁市| 安国市| 阿瓦提县| 太湖县| 锡林郭勒盟| 华宁县| 沂南县| 瓦房店市| 彩票| 文山县| 商水县| 清水河县| 兴义市| 邓州市| 关岭| 紫金县| 高尔夫| 景德镇市| 连南| 沙坪坝区| 陈巴尔虎旗| 碌曲县| 浦东新区| 罗甸县| 沁源县| 镇康县| 邯郸县| 盐边县| 榆林市| 庐江县| 罗平县|