? ? ? ? ? ? 上一章智玻,我們理解了angular框架的各種指令萨西,控制器,各種服務(wù)模塊的調(diào)用鼓黔。這個是 ? ? ?angular框架的運行模式央勒,通過c層來實現(xiàn)modle和v層的數(shù)據(jù)交互,來動態(tài)的實現(xiàn)頁面的動態(tài)效果请祖。通過控制器的作用订歪,來創(chuàng)建不同的作用域。通過肆捕,不同的作用域來進行不同的數(shù)據(jù)處理的刷晋。這樣angular框架就是把頁面的架構(gòu)分成不同的控制器,我們可以在控制器的引入不同的模塊和服務(wù)慎陵,來進行不同的服務(wù)引入眼虱。進行不同的操作。依賴注入在解決web需要的不同的功能上席纽,比如說捏悬,購物車的計算總價的時候,我們可以用工廠的模式來進行封裝不同的工具和方法润梯,在我們需要使用的時候过牙,可以直接調(diào)起方法,注入模塊到需要的控制器中纺铭,就可以來使用我們的依賴注入的工廠模式所封裝的方法寇钉。如果,需要在不同的控制器傳值的或者是說傳遞數(shù)據(jù)的話舶赔,我們可以通過service服務(wù)來進行數(shù)據(jù)之間的轉(zhuǎn)換扫倡,來進行不同頁面的數(shù)據(jù)的轉(zhuǎn)換。也是依賴注入的一種模式竟纳。在網(wǎng)站上撵溃,我們是經(jīng)常用到的service服務(wù)的。這些都是依賴注入的功能锥累,在數(shù)據(jù)的轉(zhuǎn)換和數(shù)據(jù)的傳值的缘挑,我們可以通過service服務(wù)上數(shù)據(jù)對象來進行數(shù)據(jù)的交互,在service服務(wù)上桶略,我們可以封裝一下方法语淘,比如點擊的數(shù)據(jù)的增加鬼悠,點擊按鈕數(shù)據(jù)的減少等的方法,來進行數(shù)據(jù)的交互和轉(zhuǎn)化亏娜。這些方法都在service服務(wù)里進行封裝好,我們可以通過數(shù)組來進行存儲數(shù)據(jù)蹬挺,通過封裝點擊方法來進行把數(shù)據(jù)push到數(shù)組里面维贺,然后,在注入service服務(wù)控制器的作用域中巴帮,我們就可以通過service的對象所封裝的方法拿到我們需要的數(shù)據(jù)了溯泣。因為service服務(wù)的回調(diào)函數(shù)是一個構(gòu)造函數(shù),在構(gòu)造函數(shù)的里面的所創(chuàng)建的是對象榕茧,可以用this來進行代表構(gòu)造函數(shù)的所創(chuàng)建的對象垃沦。在點擊事件里面,我們可以用this指針來進行指向點擊的數(shù)據(jù)對象用押,這樣肢簿,我們可以拿到我們所需要的數(shù)據(jù)對象,這樣蜻拨,我們可以就通過自定義指令來進行渲染到文檔流中池充。封裝好service服務(wù),引進我們的主頁里面缎讼。就可以注入我們所需要的模塊當中收夸,然后,我們在所需要的頁面中血崭,添加點擊事件卧惜。里面,可以進行傳進我們所需要的參數(shù)是我們用ajax請求下來的數(shù)據(jù)夹纫,所遍歷的對象咽瓷。這樣,我們可以通過添加點擊事件的時候捷凄,可以把所點擊的對象this.item 存儲在服務(wù)模塊中忱详,我們可以在購物車中,通過封裝好的數(shù)組push方法的所在的函數(shù)來進行拿到我們所點擊的對象數(shù)據(jù)跺涤。點擊幾個匈睁,我們所在的數(shù)組的數(shù)據(jù)就會有保存所點擊的對象數(shù)據(jù),我們就可以通過循環(huán)遍歷里面的數(shù)組中的數(shù)據(jù)桶错,來進行渲染航唆,因為,每一條數(shù)據(jù)都包含在對象里面院刁,我們可以通過自定義指令來進行對象的渲染糯钙,就是我們在購物車中的所添加的數(shù)據(jù)了。這個是我們所需要的方法和功能,因為任岸,我們在service中再榄,我們所需要的方法可以封裝和注入。
依賴注入可以通過以下幾個方法:
service: 數(shù)據(jù)的交互和注入享潜,保證數(shù)據(jù)的持久化困鸥,和不同頁面的引進共享數(shù)據(jù)。
一般的代碼寫法如下:參數(shù)第一是:我們模塊的名稱剑按。第二個參數(shù)是一個回調(diào)函數(shù)(注意:是個構(gòu)造函數(shù)疾就,所創(chuàng)建的是單例對象,我們可以用this指針來進行指向我們的單例對象艺蝴,也是我們所需要的數(shù)據(jù)的載體的數(shù)據(jù)的對象猬腰。),里面可以封裝我們所需要的方法和數(shù)據(jù)猜敢。
? ?.service('service', function () {
? ? ? ? ? ? var arr = [];
? ? ? ? ? ?this.name = 'Operation Data';
? ? ? ? ? this.addItem = function (item) {
? ? ? ? ? ? ?arr.push(item)
? ? ? ?};
})
factory: 工廠方法姑荷。工廠方法是我們的設(shè)計模式比較好的設(shè)計思想。在我們學習面向?qū)ο蟮臅r候缩擂,我們就可以通過工廠方法來創(chuàng)建我們的所需要的對象厢拭。可以大批量創(chuàng)建我們的所需要的對象模板撇叁。在angular框架中供鸠,我們用factory工廠方法來進行封裝我們的所需要的工具和方法。來進模塊的依賴注入陨闹。我們可以單獨建個模塊的來封裝我們的所需要的工具和方法楞捂,來進行再在需要的地方進行模塊注入。實現(xiàn)方法工具的共享趋厉。這個是工廠方法的用法寨闹。在工廠方法里面進行返回的也是個對象。外部可以調(diào)來獲取使用君账。寫法如下:
app.factory('logFactory',function(){
? ? ?return {?
? ? ? ? ? ? ? ? ? ? min: function (a,b) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return a>b? a:b;
? ? ? ? ? ? ? ? ? ? ? ?} ,
? ? ? ? ? ? ? ? ? ? max:function (a,b){
? ? ? ? ? ? ? ? ? ? ? ? ? ?return a>b?b:a;
? ? ? ? ? ? ? ? ?}
? ? ? }
})
? ? ? ? 在這里繁堡,我們就可以用工廠的方法來進行定義了兩個方法,是比較大小的方法乡数,在需要比較大小的方法所需要的模塊我們可以依賴注入調(diào)用工廠的方法進行比較大小椭蹄。在原生js中,我們需要的是通過封裝函數(shù)來進行調(diào)用净赴,就可以了绳矩。在angular框架中,我們需要把公共的方法封裝在工廠的模式中玖翅,就可以了翼馆。通過模塊的注入來進行調(diào)用割以。這個是與原生的js中,所不同的方法应媚。在這里的是严沥,工廠的方法和service服務(wù)的就是我們來進行數(shù)據(jù)的傳送。
? ? ? ? ? 上面中姜,我們了解了我們的項目是通過模塊化來進行管理我們的頁面的祝峻,通過依賴注入的方式來進行方法的調(diào)用,和數(shù)據(jù)的傳送扎筒,這是angular的最大的特點,我們把計算價錢的方法酬姆,和計算數(shù)量的方法來進行封裝到工廠方法里嗜桌。也就是說,我們要在工廠里進行封裝我們所需要的方法辞色,通過模塊注入的形式來進行方法的傳遞骨宠,當然,也可以通過事件的觸發(fā)來進行調(diào)用我們的注入的方法相满,也就是我們定義的事件觸發(fā)來進行我們的注入的方法层亿,這是不同的控制器的傳遞方法的一種形式。所以立美,我們要把共同方法來進行封裝在工廠里面匿又,實現(xiàn)方法共享。在封裝方法建蹄,我們可以充分利用對象碌更,數(shù)組,函數(shù)來進行方法的封裝洞慎,通過函數(shù)的傳參痛单,形參,實參是我們的經(jīng)常利用函數(shù)的方法劲腿,定義傳入不同的參數(shù)來進行不同的方法計算方法旭绒,比如,在購物車中焦人,我們經(jīng)常用挥吵,定義求點擊數(shù)量相加的方法,這個數(shù)量是通過service服務(wù)上