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

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

AngulerJS學習(二) 依賴注入

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

簡介:

首先我們需要理解什么是依賴注入控制反轉和依賴注入有什么區別?假定:應用程序A,需要訪問外部資源C。這里使用了容器B(是指用來實現 IOC/DI 功能的一個框架程序)。 A需要訪問C B獲取C然后返回給AIOC inversion of control 控制反轉:站在容器角度。B控制A,由B反向的向A注入C。即容器控制應用程序,由容器反向的向應用程序注入應用程序所需要的外部資源。DI Dependency Injection 依賴注入:站在應用程序的角度。A依賴B獲取C,B將C注入A。即應用程序依賴容器創建并注入它所需要的外部資源。

AngularJS依賴注入

PRovider服務($provide)

AngularJS 提供很好的依賴注入機制。以下5個核心組件用來作為依賴注入:

valuefactoryserviceproviderconstantdecorator (打醬油)

Constant

定義常量用的,這貨定義的值當然就不能被改變,它可以被注入到任何地方,但是不能被裝飾器(decorator)裝飾

var app = angular.module('app', []);app.config(function ($provide) { $provide.constant('movieTitle', 'The Matrix');});app.controller('ctrl', function (movieTitle) { expect(movieTitle).toEqual('The Matrix');});// 語法糖:app.constant('movieTitle', 'The Matrix');

Value

這貨可以是string,number甚至function,它和constant的不同之處在于,它可以被修改,不能被注入到config中,但是它可以被decorator裝飾

var app = angular.module('app', []);app.config(function ($provide) { $provide.value('movieTitle', 'The Matrix')});app.controller('ctrl', function (movieTitle) { expect(movieTitle).toEqual('The Matrix');});// 語法糖:app.value('movieTitle', 'The Matrix');

Service

它是一個可注入的構造器,在AngularJS中它是單例的,用它在Controller中通信或者共享數據都很合適。

var app = angular.module('app' ,[]);app.config(function ($provide) { $provide.service('movie', function () { this.title = 'The Matrix'; });});app.controller('ctrl', function (movie) { expect(movie.title).toEqual('The Matrix');});// 語法糖:app.service('movie', function () { this.title = 'The Matrix';});

Factory

它是一個可注入的function,它和service的區別就是:factory是普通function,而service是一個構造器(constructor),這樣Angular在調用service時會用new關鍵字,而調用factory時只是調用普通的function,所以factory可以返回任何東西,而service可以不返回(可查閱new關鍵字的作用)。

var app = angular.module('app', []);app.config(function ($provide) { $provide.factory('movie', function () { return { title: 'The Matrix'; } });}); app.controller('ctrl', function (movie) { expect(movie.title).toEqual('The Matrix');});// 語法糖app.factory('movie', function () { return { title: 'The Matrix'; }});

Provider

provider是他們的老大,上面的幾乎(除了constant)都是provider的封裝,provider必須有一個$get方法,當然也可以說provider是一個可配置的factory。

var app = angular.module('app', []);app.provider('movie', function () { var version; return { setVersion: function (value) { version = value; }, $get: function () { return { title: 'The Matrix' + ' ' + version } } }});app.config(function (movieProvider) { movieProvider.setVersion('Reloaded');});app.controller('ctrl', function (movie) { expect(movie.title).toEqual('The Matrix Reloaded');});

Decorator

這個比較特殊,它不是provider,它是用來裝飾其他provider的,而前面也說過,他不能裝飾Constant,因為實際上Constant不是通過provider()方法創建的。

var app = angular.module('app', []);app.value('movieTitle', 'The Matrix');app.config(function ($provide) { $provide.decorator('movieTitle', function ($delegate) { return $delegate + ' - starring Keanu Reeves'; });});app.controller('myController', function (movieTitle) { expect(movieTitle).toEqual('The Matrix - starring Keanu Reeves');});

總結:

所有的供應商都只被實例化一次,也就說他們都是單例的除了constant,所有的供應商都可以被裝飾器(decorator)裝飾value就是一個簡單的可注入的值service是一個可注入的構造器factory是一個可注入的方法decorator可以修改或封裝其他的供應商,當然除了constantprovider是一個可配置的factory

上述來源:(AngularJS中的Provider們:Service和Factory等的區別)https://segmentfault.com/a/1190000003096933

注入器($injector)

注入器負責從我們通過 provide 創建的服務中創建注入的實例。只要你編寫了一個帶有可注入性的參數,你都能看到注入器是如何運行的。每一個 AngularJS 應用都有唯一一個 injector,當應用啟動的時候它被創造出來,你可以通過將 injector 注入到任何可注入函數中來得到它($injector 知道如何注入它自己!)。 一旦你擁有了 injector,你可以動過調用 get 函數來獲得任何一個已經被定義過的服務的實例。

var movie = $injector.get('movie');expect(movie.title).toEqual('The Matrix Reloaded');

注入器同樣也負責將服務注入到函數中;例如,你可以魔法般的將服務注入到任何函數中,只要你使用了注入器的 invoke 方法:

var myFunction = function(movie) { return movie.title;};$injector.invoke(myFunction);

如果注入器只是創建一個服務的實例一次的話,那么它也沒什么了不起的。它的厲害之處在于,他能夠通過服務名稱緩存從一個 provider 中返回的任何東西,當你下一次再使用這個服務時,你將會得到同一個對象。 因此,你可以通過調用 injector.invike 將服務注入到任何函數中也是合情合理的了。包括:

控制器定義函數指令定義函數過濾器定義函數provider中的$get方法(也就是factory函數)

由于constant和value總是返回一個靜態值,它們不會通過注入器被調用,因此你不能在其中注入任何東西。


上一篇:居中布局

下一篇:pjax使用心得

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线不卡| 国产精品高清在线观看| 欧美日韩亚洲一区二区三区| 亚洲最大福利视频网站| 国产精品露脸自拍| 色婷婷**av毛片一区| 国产999视频| 国产精品一区二区三区免费视频| 国产精品久久久久不卡| 国产精品成人品| 91亚洲精华国产精华| 国产视频在线观看一区二区| 欧美老肥婆性猛交视频| 影音先锋日韩有码| 亚洲sss综合天堂久久| 97在线观看免费高清| 亚洲欧美成人在线| 国产精品视频久久| 91精品国产综合久久久久久蜜臀| 国产精品一区二区久久久久| 国产精品视频在线观看| 亚洲色图17p| 亚洲一区亚洲二区亚洲三区| 国产一区二区丝袜高跟鞋图片| 亚洲精品国产精品久久清纯直播| 亚洲天堂一区二区三区| 亚洲免费人成在线视频观看| y97精品国产97久久久久久| 久久久久久久久久久久av| 91国偷自产一区二区三区的观看方式| 欧美日韩中文字幕在线视频| 久久欧美在线电影| 亚洲精品网站在线播放gif| 亚洲男人的天堂在线播放| 日韩av一区在线观看| 国产精品久久久久久av福利软件| 日韩欧美主播在线| 欧美在线www| 欧美第一页在线| 国产精品三级在线| 日韩精品免费在线视频观看| 国产91ⅴ在线精品免费观看| 日韩欧美在线中文字幕| 国产a∨精品一区二区三区不卡| 97涩涩爰在线观看亚洲| 亚洲精品第一国产综合精品| 久久视频在线观看免费| 国内精品小视频在线观看| 91久久久久久久久久| 国产激情综合五月久久| 欧美裸身视频免费观看| 欧美激情xxxx性bbbb| 97在线免费视频| 中文字幕精品av| 在线电影中文日韩| 91精品国产自产在线| 96pao国产成视频永久免费| 日韩精品免费在线视频| 日本精品免费观看| 欧美日韩亚洲91| 日韩在线欧美在线国产在线| 日韩av中文字幕在线播放| 亚洲r级在线观看| 久久精品国产久精国产一老狼| 国产精品视频精品| 国产乱人伦真实精品视频| 久久久999精品免费| 97在线免费观看视频| 欧美精品免费播放| 成人久久久久久| 久久影视三级福利片| 欧美激情综合亚洲一二区| 91精品国产亚洲| 国产成人综合av| 亚洲第一偷拍网| 国产精自产拍久久久久久蜜| 亚洲女成人图区| 欧美性猛交xxxx富婆| 国产一区二区三区在线播放免费观看| 国产欧美 在线欧美| 亚洲美女av在线播放| 欧美性xxxx| 久久影视电视剧凤归四时歌| 久久五月天综合| 欧美激情亚洲一区| 欧美一级片在线播放| 国产精品嫩草影院久久久| 亚洲精品黄网在线观看| 欧美电影免费观看电视剧大全| 久久成人精品电影| 久久久久免费精品国产| 亚洲男人第一网站| 国产精品最新在线观看| 激情懂色av一区av二区av| 欧美视频专区一二在线观看| 亚洲黄色www网站| 精品久久久久久久久国产字幕| 疯狂欧美牲乱大交777| 精品久久久久久久久久国产| 欧美日韩在线视频观看| 国产亚洲精品日韩| 日韩精品一区二区视频| 日韩网站免费观看高清| 欧美专区日韩视频| 成人性生交大片免费看视频直播| 欧美日韩亚洲一区二| 欧美精品日韩三级| 国产一区视频在线播放| 欧美黑人又粗大| 欧美日韩免费在线观看| 亚洲精品欧美日韩专区| 亚洲xxxx视频| 日韩成人在线免费观看| 国产精品久久久久久久av大片| 欧美性生交xxxxx久久久| 91免费人成网站在线观看18| 亚洲免费视频观看| 91麻豆桃色免费看| 日韩激情片免费| 久久久综合av| 国产98色在线| 久久国产精彩视频| 久久艳片www.17c.com| 夜夜嗨av一区二区三区四区| 色综合伊人色综合网站| 夜夜嗨av色一区二区不卡| 国产日韩在线一区| 国产亚洲一区精品| 国内精品视频久久| 亚洲欧洲在线观看| 久久久亚洲国产| 欧美丰满少妇xxxxx| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品狼人色视频一区| 正在播放欧美一区| 美女999久久久精品视频| 日本道色综合久久影院| 91中文字幕在线观看| 欧洲成人在线视频| 97在线视频免费看| 日韩视频一区在线| 国产精品久久久久久久美男| 成人国产精品一区二区| 欧美在线视频网站| 成人欧美一区二区三区黑人孕妇| 欧美尺度大的性做爰视频| 欧美午夜精品久久久久久久| 91av成人在线| 日本一区二区在线播放| 欧美日韩国产精品一区二区不卡中文| 欧美性猛交xxxx乱大交| 中文字幕亚洲专区| 色香阁99久久精品久久久| 欧美成人在线影院| 国产精品无码专区在线观看| 欧美福利小视频| 精品视频在线播放色网色视频| 欧美精品电影在线| 久久综合伊人77777| 欧洲成人在线观看| 日韩中文字幕在线视频播放| 在线日韩日本国产亚洲| 久久亚洲一区二区三区四区五区高| 91po在线观看91精品国产性色|