亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

(11)AngularJS 1.X 之自定義服務

2024-04-27 15:17:59
字體:
來源:轉載
供稿:網友

引言通過service方法自定義服務1 使用模塊service方法自定義服務2 使用PRovide服務的service方法自定義服務3 service自定義服務解釋通過factory方法自定義服務1 使用模塊factory方法自定義服務2 使用服務factory方法自定義服務3 解釋factory方法自定義的服務通過provider方法自定義服務1 provider定義簡單服務2 provider定義需要配置的服務3 provider創建的服務需要注意的地方使用供應商修改默認表達式符號1 使用interpolateProvider供應商修改默認表達式服務服務注入代碼壓縮問題

1.引言

      在本篇博客中主要介紹一下如何自定義服務,為什么要自定義服務?首先我們應該意識到:在開發的過程中,controller 這一層應該很薄;也就是說,應用里大部分的業務邏輯 和持久化數據都應該放在 service里。controller 中就不應該存儲持久化數據,出于內存性能的考慮,controller 只在需要 的時候才會初始化,一旦不需要就會被拋棄。因此,每次當你切換或刷新頁面的時候, Angular 會清空當前的 controller。與此同時,service 可以用來永久保存應用的數據, 并且這些數據可以在不同的 controller 之間使用。

      關于自定義服務有三種方法,三種方法分別為:

provider factoryservice

這三種方法創建自定義服務都有著自己的特點,我們以前說過:服務的類型有兩種,一種是具有供應商的服務,一種是不具備供應商的服務,通過Provider方法創建的服務是具有供應商的,因此我們可以將Provider創建的服務傳入config方法進行配置;而Factory,Service方法創建的服務是不具備供應商概念的,Factory,Service兩個方法創建服務也有細微的區別,接下來我們分別使用這三種方法創建自定義服務。

2.通過service方法自定義服務

      service方法定義的服務 是用new關鍵字實例化的。因此,我們可以直接給this添加屬性,然后服務返回this。我們也可以將自定義的服務注入到我們的控制器中。使用service方法自定義服務也有兩種方式,一種是通過模塊的service方法自定義服務,一種是通過$provide服務自定義服務。接下來我們就來看一下這兩種方法。

重點說明service自定義服務是new一個函數對象(一定是對象)

2.1 使用模塊service方法自定義服務

自定義服務,服務名稱為$myService var app = angular.module('myApp',[]); app.service("$myService",function(){ var _name="wpx"; this.getName=function(){ return _name; } })在控制區中注入我們的服務 app.controller("firstController", function ($scope,$myService) { $scope.name=$myService.getName() })html片段<div ng-controller="firstController">{{name}}</div>運行結果

這里寫圖片描述

2.2 使用$provide服務的service方法自定義服務

自定義我們的服務:$myService var app = angular.module('myApp',[], function ($provide) { $provide.service("$myService", function () { var _name="wpx"; this.getName= function () { return _name; } }) });將服務注入到控制器中 app.controller("firstController", function ($scope,$myService) { $scope.name=$myService.getName() })html 片段 <div ng-controller="firstController">{{name}}</div>運行結果

這里寫圖片描述

2.3 service自定義服務解釋

首先我們注意到:service自定義的服務是一個函數。service自定義的服務函數是可以注入其他服務的,比如我注入$http服務,可以這么寫//注入其他服務app.service("$myService",function($http){ })service自定義的服務是new出來的,也就是說改服務的實現和函數類用法一樣,比如: function myClass() { } var a=new myClass();

3.通過factory方法自定義服務

      使用factory方法自定義服務也是有兩種方式,通過模塊定義,通過$provide服務的factory方法定義服務,factory創建的服務和service方法定義的服務是有區別的,factory 方法直接把一個函數當成一個對象的$get方法,因此factory 創建的服務 是可以直接返回字符串的。service自定義的服務就不可以直接返回字符串),接下來我們就使用factory 方法自定義我們的服務

重點說明factory自定義服務是是調用函數 ,然后返回一個對象,或者是數據

3.1 使用模塊factory方法自定義服務

自定義服務,服務名稱為:$myFactory1(返回字符串) var app = angular.module('myApp',[]); app.factory("$myFactory1",function(){ return "aaaa"; })自定義服務,服務名稱為:$myFactory2(返回對象)app.factory("$myFactory2",function(){ var _name; function getName(){ return _name; } function setName(name) { _name=name; } return { getName:getName, setName:setName } })將自定義服務注入到控制器app.controller("firstController", function ($scope,$myFactory1,$myFactory2) { $scope.name=$myFactory1 $myFactory2.setName("wpx");})app.controller("secondController", function ($scope,$myFactory2) { $scope.name=$myFactory2.getName() })html片段 <div ng-controller="firstController">{{name}}</div> <div ng-controller="secondController">{{name}}</div>運行結果

這里寫圖片描述

3.2 使用服務factory方法自定義服務

      話不多少,直接上代碼

var app = angular.module('myApp',[], function ($provide) { $provide.factory("factoryName",function () { //服務代碼 }) });

3.3 解釋factory方法自定義的服務

第一點:factory的服務是當作方法來調用第二點:factory自定義服務也可以注入其他服務,比如:$httpapp.factory("$myFactory1",function($http){ //代碼實現 //記得return })第三點:服務是單例的,通過實例我們知道,服務可以在多個控制器之間傳遞數據(在控制器一中給服務添加數據,然后在控制器2中讀取數據)

4.通過provider方法自定義服務

      在前面我們說過provider方法定義的服務最大的區別在于具有供應商的概念,具有了供應商我們就可以通過config方法配置一些全局的屬性。首先我們先使用provider定義一個簡單的服務。

4.1 provider定義簡單服務

使用模塊的provider定義一個服務(叫做mySelf) var app = angular.module('myApp',[]); app.provider("$mySelf", function () { this.$get=function(){ return { message:"$mySelf" } } })使用$provide定義一個服務(叫做mySelf) var app = angular.module('myApp',[], function ($provide) { $provide.provider("$mySelf", function () { this.$get=function(){ return { message:"$mySelf" } } }) });將自定義服務注入到控制器app.controller("firstController", function ($scope,$mySelf) { $scope.message=$mySelf.message })html片段 <div ng-controller="firstController">{{message}}</div>運行結果

這里寫圖片描述

4.2 provider定義需要配置的服務

      剛剛我們說過:通過provider定義的服務會生成供應商,有供應商的服務可以通過模塊的config方法進行配置,接下來我們來使用一下供應商。

創建一個自定義的服務(該服務需要配置一個attr屬性) var app = angular.module('myApp',[]); app.provider("$mySelf", function () { //需要配置的屬性 this.attr=""; this.$get=function(){ var that=this; var service={}; var _attr="$mySelf.attr"; service.getAttr=function(){ return _attr+"-----"+that.attr; } return service; } })通過供應商配置屬性(在服務的后面添加Provider就是供應商)app.config(function ($mySelfProvider) { $mySelfProvider.attr="config.attr"; })將服務注入到控制器中app.controller("firstController", function ($scope,$mySelf) { $scope.attr=$mySelf.getAttr(); })html片段<div ng-controller="firstController">{{attr}}</div>運行結果

這里寫圖片描述

4.3 provider創建的服務需要注意的地方

使用provider方法創建服務具有供應商我們可以通過config配置供應商的屬性使用provider自定義服務是如何創建的?首先我們看一下服務的定義//首先我們new了一下,服務函數然后使用this.$get方法,將得到的結果注入到了控制器中,也就是說provider方法創建的服務其實是service方法和factory方法的一個組合使用。app.provider("$mySelf", function () { //需要配置的屬性 this.attr=""; this.$get=function(){ var that=this; var service={}; var _attr="$mySelf.attr"; service.getAttr=function(){ return _attr+"-----"+that.attr; } return service; } })*

5 使用供應商修改默認表達式符號

      前面我們說了,部分服務是具有供應商的,既然AngularJS提供了一些默認的服務,那么就應該有一些默認的供應商,這里我們就使用一下默認的供應商修改一下默認的表達式,默認表達式是{{表達式}},現在我們將其修改為#表達式#。

5.1 使用$interpolateProvider供應商修改默認表達式服務

使用config方法設置供應商 var app = angular.module('myApp',[]); app.config(function ($interpolateProvider) { $interpolateProvider.startSymbol("#"); $interpolateProvider.endSymbol("#"); })使用新的表達數輸出數據//控制器app.controller("firstController", function ($scope) { $scope.attr="hello world";})//html片段<div ng-controller="firstController">#attr#</div>運行結果

這里寫圖片描述

6 服務注入,代碼壓縮問題

      在使用服務的時候,不可避免的就會涉及到依賴注入的問題,如果服務的名稱過長,那么我們多次使用服務代碼的體積就會變得越來越大,所以我們在注入服務的時候可以給服務:起別名。利用非常短的別名來代替服務,接下來我們看一看如何注入我們的服務,以$scope服務為例:

app.controller("firstController",["$scope","$rootScope",function ($s,$rs) { $s.name="wpx"; $rs.age="20"; }])html代碼片段<div ng-controller="firstController">{{name}}---{{age}}</div>運行結果

這里寫圖片描述

在上面的例子中,我們使用$s代替$scope,$rs代替$rootScope,那么在控制器中,我們就可以直接使用別名,這樣就會減少代碼量只要是涉及服務注入的情況都可以使用這種方法進行代碼壓縮。
上一篇:web前端優化

下一篇:java 求二叉樹深度

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91人人爽人人爽人人精88v| 92看片淫黄大片看国产片| 亚洲综合社区网| 日本91av在线播放| 日韩成人av在线播放| 亚洲精品美女在线| 国产亚洲精品成人av久久ww| 色悠悠久久88| 欧美日韩亚洲精品一区二区三区| 亚洲国产精彩中文乱码av在线播放| 国产亚洲一区二区精品| 日韩综合中文字幕| 这里只有精品视频| 日韩免费看的电影电视剧大全| 中日韩美女免费视频网站在线观看| 亚洲一区二区在线| 国产69久久精品成人看| 色一情一乱一区二区| 国产精品海角社区在线观看| 亚洲欧美在线播放| 日韩免费在线免费观看| 亚洲精品suv精品一区二区| 欧美激情视频给我| 97国产一区二区精品久久呦| 成人免费观看49www在线观看| 4388成人网| 欧美巨猛xxxx猛交黑人97人| 色偷偷88888欧美精品久久久| 久久久久久尹人网香蕉| 性色av一区二区三区在线观看| 一本色道久久综合亚洲精品小说| 国产精品va在线播放我和闺蜜| 成人h片在线播放免费网站| 日韩av一区在线| 91av视频在线免费观看| 日本午夜精品理论片a级appf发布| 国产一区二区三区在线观看视频| 91免费欧美精品| 国产一区二区三区四区福利| 欧美最顶级丰满的aⅴ艳星| 美女视频黄免费的亚洲男人天堂| 亚洲最大福利视频网| 国产偷亚洲偷欧美偷精品| 国产欧美日韩免费| 日韩欧美黄色动漫| 国产精品入口夜色视频大尺度| 日韩精品在线看| 美女扒开尿口让男人操亚洲视频网站| 国产精品精品一区二区三区午夜版| 欧美极品在线播放| 欧美日韩第一视频| 奇米一区二区三区四区久久| 欧美一级大片视频| 午夜精品99久久免费| 亚洲国产成人在线视频| 久久综合伊人77777尤物| 国产精品欧美日韩| 欧美在线欧美在线| 亚洲肉体裸体xxxx137| 亚洲第一区第二区| 国产精品美女视频网站| 91tv亚洲精品香蕉国产一区7ujn| 色综合久久88色综合天天看泰| 亚洲最大成人网色| 成人精品一区二区三区电影黑人| 亚洲夜晚福利在线观看| 91沈先生在线观看| 日韩精品视频在线观看免费| 亚洲天堂日韩电影| 欧美成人国产va精品日本一级| 欧美性猛交xxxx乱大交极品| 97成人在线视频| 国产区精品视频| 日韩欧美大尺度| 中文字幕欧美精品日韩中文字幕| 欧美成人午夜免费视在线看片| 日韩精品中文字幕在线播放| 欧美一区二三区| 久热99视频在线观看| 精品久久在线播放| 8x拔播拔播x8国产精品| 欧美日韩国产一区二区三区| 久久精品免费播放| 亚洲精品wwwww| 欧美一乱一性一交一视频| 国产精品一区二区在线| 欧美成人免费一级人片100| 久久精品国产久精国产一老狼| 国产精品视频公开费视频| 国产有码在线一区二区视频| 国产一区红桃视频| 九色精品美女在线| 欧美wwwwww| 8x拔播拔播x8国产精品| 亚洲精品成a人在线观看| 91日本在线视频| 亚洲伊人第一页| 久久露脸国产精品| 亚洲少妇激情视频| 欧美日韩在线视频一区| 日日狠狠久久偷偷四色综合免费| 欧美国产日韩精品| 中文字幕精品—区二区| 日韩欧美中文第一页| 日韩av在线影院| 911国产网站尤物在线观看| 91中文在线观看| 91av视频在线| 亚洲天堂2020| www.日韩免费| 伊人伊成久久人综合网站| 日本精品性网站在线观看| 性欧美长视频免费观看不卡| 欧美日韩日本国产| 亚洲第一中文字幕| 欧美日韩性视频在线| 国产视频精品一区二区三区| 亚洲精品在线不卡| 欧美色播在线播放| 欧美激情女人20p| 欧美激情第1页| 国自产精品手机在线观看视频| 国产精品美女www爽爽爽视频| 成人在线一区二区| 欧美肥婆姓交大片| 亚洲xxx自由成熟| 狠狠操狠狠色综合网| 伊人激情综合网| 国产精品视频网站| 国产偷亚洲偷欧美偷精品| 中文字幕成人精品久久不卡| 97精品国产97久久久久久春色| 成人黄色在线播放| 欧美成人免费播放| 日本欧美中文字幕| 亚洲国产精品嫩草影院久久| 在线精品视频视频中文字幕| 欧美日韩亚洲成人| 中文字幕欧美精品在线| 日韩精品在线免费| 欧美激情第1页| 国产精品91久久久久久| 国产精品久久不能| 欧美日韩第一视频| 成人h猎奇视频网站| 中文字幕在线视频日韩| 国模精品一区二区三区色天香| 欧美日本黄视频| 欧美激情视频免费观看| 久久激情五月丁香伊人| 精品偷拍各种wc美女嘘嘘| 亚洲电影第1页| 欧美性猛交xxxx久久久| 欧美精品videosex性欧美| 欧美日韩国产91| 91精品国产高清久久久久久| 成人在线视频网站| 日韩中文字幕av| 亚洲一级片在线看| 亚洲人成欧美中文字幕| 国产成人高潮免费观看精品| 欧美日韩亚洲系列| 这里精品视频免费| 国产精品久久久久aaaa九色|