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

首頁 > 編程 > JavaScript > 正文

AngularJS實用開發技巧(推薦)

2019-11-20 09:29:30
字體:
來源:轉載
供稿:網友

一、開端

Angular JS 是一組用來開發Web頁面的框架、模板以及數據綁定和豐富UI組件。它提供web應用的架構,無需進行手工DOM操作。 AngularJS很小,只有60K,兼容主流瀏覽器,與jQuery 配合良好。

二、基礎原則了解

①angular的一些入門了解

一、基礎知識

1.angular放棄了IE8

2.四大核心分別是mvc、模塊化、指令系統、雙向數據綁定

二、一些原則

1.不要復用controller,一個控制器一般只負責一小塊視圖。

2.不要在controller里面操作dom。

3.不要在contorller里面做數據格式化,ng有很好的表單控件。

4.不要在controller里面做數據過濾操作,有$filter服務。

5.一般情況下,controller是不會互相調用的,控制器之間的交互會通過事件進行。

6.angular利用指令來復用view。

7.$scope是一個樹型結構,與DOM標簽平行。

8.子$scope對象會繼承父$scope上的屬性和方法。

9.每一個angular應用只有一個$rootScope對象。(一般位于ng-app上)。

10.可以用angular.element($0).scope()進行調試。

11.使用ngRoute進行視圖之間的路由。

三、HTML頁面最常用且實用的angular內置指令

①.ng-class(適用于類似點贊、關注等某個樣式會因為某個操作改變的情況)

ng-class 指令用于給 HTML 元素動態綁定一個或多個 CSS 類。ng-class 指令的值可以是字符串,對象,或一個數組。

如果是字符串,多個類名使用空格分隔。

如果是對象,需要使用 key-value 對,key 是一個布爾值,value 為你想要添加的類名。只有在 key 為 true 時類才會被添加。

如果是數組,可以由字符串或對象組合組成,數組的元素可以是字符串或對象。

建議的兩種使用方式:

一、字符串形式,代碼如下:

<i class="icon" ng-class="{true:'ion-ios-heart',false:'ion-ios-heart-outline'}[AccountInfo.isFocus]" ng-click='wetherFocus()'></i>

這樣的意思就是,i標簽有一個基礎類為icon,ng-class則綁定了一個動態的類,而這個類要取哪一個值則由AccountInfo.isFocus的值是true或者false來決定,若其值為true則i標簽會添加ion-ios-heart這個類,若其值為false則i標簽會添加ion-ios-heart-outline

這個類。i標簽還綁定了一個ng-click的事件,在這個事件里面除了處理相應的邏輯之外,還決定AccountInfo.isFocus的值。這樣的話,當發生點擊操作的時候,自然就改變i標簽相應的類,繼而表現出不同的樣式了。

二、key-value的樣式,代碼如下:

<i class="icon" ng-class="{'ion-ios-heart':isIos,'ion-android-heart':isAndroid}"> </i>

顯然,由代碼則可以看出,這樣的含義就是當isIos為true的時候就會取ion-ios-heart這個類,當isAndroid的值為true的時候,就會取ion-android-heart這個類。

②.ng-show和ng-hide(適用于對于不同的情況顯示兩種不同的內容時) 

ng-show 指令在表達式為 true 時顯示指定的 HTML 元素,否則隱藏指定的 HTML 元素。

ng-hide 指令在表達式為 true 時隱藏指定的 HTML 元素,否則顯示指定的 HTML 元素。

哈哈,看著就是水火不容的兄弟。。。。

例子如下:

<div class="keyboard"><span class="keyboardIcon" ng-click="toggleMenu()"></span></div><div class="footer-menu"><ul class="menu-list" ng-show="menuState">...</ul><div class="footer-send" ng-hide="menuState">...</div>

設置一個布爾變量menuState(實際開發中你可以用表達式,三目運算式等等),當其為true的時候,ng-show的內容會顯示,ng-hide的內容會隱藏。反之則反之。。。

③.ng-switch(適用于在多種情況下顯示不同的內容時)

ng-switch 指令根據表達式顯示或隱藏對應的部分。

對應的子元素使用 ng-switch-when 指令,如果匹配選中選擇顯示,其他為匹配的則移除。

通過使用 ng-switch-default 指令設置默認選項,如果都沒有匹配的情況,默認選項會顯示。

例子:

<div ng-switch="essayType"><div class="list-cart" ng-switch-when="4">....</div><div class="list-cart left-pic" ng-switch-when="3">....</div><div class="single-pic" ng-switch-when="1">...</div><div class="single-pic" ng-switch-when="2">...</div><div class="single-pic" ng-switch-default>...</div></div>

④.ng-model(這里主要說一下ng-model神奇的小坑坑)

ng-model 指令綁定了 HTML 表單元素到 scope 變量中。

如果 scope 中不存在變量, 將會創建它。ng-model常用于<input>, <select>, <textarea>等元素。

如下代碼:

<div class="WhatISay"><textarea name="my-massage-detail" ng-model="content" class="my-massage-detail" placeholder="請輸入留言"></textarea><a class="button btn"ng-click="submitMes()">提交</a><br></div>

按照定義,理論上來說我們提交的時候,直接在controller里面獲取在頁面定義了的ng-model的值,是可以的。但是實際上這樣是不可行的。親測發現輸出了一個undefined,而且,如果在controller里面定義ng-model的初始值的話,獲取到的就是初始值而不是改變后的最新值。

查找了一些資料,大概意思就是說。angular限制了我們的一些定義。我們只能使用一個非原始的對象來傳遞參數。

什么意思呢。稍微改一下上面的例子,如下:

html代碼:

<div class="WhatISay"><textarea name="my-massage-detail" ng-model="model.content" class="my-massage-detail" placeholder="請輸入留言"></textarea><a class="button btn"ng-click="submitMes()">提交</a></div>

controller代碼:

$scope.model = {};$scope.model.content = '';$scope.submitMes=function(){console.log($scope.model.content);}

就是我們是定義了一個對象,然后把ng-model定義為這個對象里面的一個屬性這樣來處理的。這樣子,我們就得到了ng-model的最新值了。

還有一種比較簡單的方式就是直接把ng-model作為參數傳進去就好了。

例子如下:

//HTML代碼<input type="text" ng-model="code"><button ng-click="setCode(code)">Login</button><br>//controller代碼$scope.setCode = function(code){alert(code);}

四、數據交互實用技巧

①Promise的利用

ES6定義了Promise對象。這個對象挺好用的,特別是用在與后臺交互的時候。既預防回調過深,又可以針對一些情況做統一處理,還提高了代碼的可讀性。在angularJs里面也封裝了這樣一個服務,就是$q。

$q是做為angularjs的一個服務而存在的,只是對promise異步編程模式的一個簡化實現版。defer對象(延遲對象)可以通$q.defer()獲取,該對象有三個方法:

resolve(value):向promise對象異步執行體發送消息告訴他我已經成功完成任務,value即為發送的消息。

reject(value): 向promise對象異步執行體發送消息告訴他我已經不可能完成這個任務了,value即為發送的消息。

notify(value): 向promise對象異步執行體發送消息告訴他我現在任務完成的情況,value即為發送的消息。

  這些消息發送完promise會調用現有的回調函數。

promise即與這個defer對象的承諾對象。promise對象可以通過defer.promise獲取,promise對象的一些方法:

  then(successCallback,errorCallback,notifyCallback):參數為不同消息下的不同回調函數,defer發送不同的消息執行不同的回調函數,消息作為這些回調函數的參數傳遞。返回值為回一個promise對象為支持鏈式調用而存在。當第一個defer對象發送消 息后,后面的promise對應的defer對象也會發送消息,但是發送的消息不一樣,不管第一個defer對象發送的是reject還是resolve,第二個及其以后的都是發送的resolve,消息是可傳遞的。

  catch(errorCallback):then(null,errorCallback)的縮寫。

  finally(callback):相當于then(callback,callback)的縮寫,這個finally中的方法不接受參數,卻可以將defer發送的消息和消息類型成功傳遞到下一個then中。

  defer():用來生成一個延遲對象 var defer =$q.defer();

  reject():參數接收錯誤消息,相當于在回調函數中拋出一個異常,然后在下一個then中調用錯誤的回調函數。

  all():參數接收為一個promise數組,返回一個新的單一promise對象,當這些promise對象對應defer對象全部解決這個單一promise對象才會解決,當這些promise對象中有一個被reject了,這個單一promise同樣的被reject了。

  when():接收第一個參數為一個任意值或者是一個promise對象,其他3個同promise的then方法,返回值為一個promise對象。第一個參數若不是promise對象則直接運行success回調且消息為這個對象,若為promise那么返回的promise其實就是對這個promise 類型的參數的一個包裝而已,被傳入的這個promise對應的defer發送的消息,會被我們when函數返回的promise對象所接收到。

具體用法如下:

在angular中,定義一個專門用來交互的服務。

get: function (url, options) { <br> var deferred = $q.defer(); <br> showTip();$http.get(url, options).success(function (data) {hideTip();if (data.Success) {deferred.resolve(data);} else {deferred.reject(data.Message);}}).error(function (data) {hideTip();deferred.reject(data);});return deferred.promise;}//controller里面的調用get('url',params).then(function (data) {//這里是successCallback},function (data) {//這里是errorCallback});

  這樣,我們就可以在每個請求發出時統一定義一些提示,然后請求結束之后隱藏這些提示。這段代碼中,大概意思就是,當請求成功的時候,就會調用deferred.resolve(data),把狀態設置為成功,這樣就會自動執行then里面的第一個函數即successCallback,并把請求到的數據data傳遞進去。而當請求失敗的時候,則會調用第二個函數,即errorCallback。

以上所述是小編給大家介紹的AngularJS實用的開發技巧,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区免费视频| 九九九久久久久久| 国产精品久久久久久久av电影| 狠狠色香婷婷久久亚洲精品| 欧美日韩国产麻豆| 亚洲天堂影视av| 久久91精品国产91久久跳| 欧美国产日韩视频| 一区二区欧美亚洲| 欧美精品精品精品精品免费| 亚洲一区999| 欧美日韩亚洲系列| 亚洲热线99精品视频| 亚洲黄色www网站| 久久久久日韩精品久久久男男| 成人a在线观看| 91香蕉电影院| 蜜月aⅴ免费一区二区三区| 久久久久99精品久久久久| 国产99久久精品一区二区| 不卡av在线播放| 中文字幕成人在线| 日韩av成人在线| 欧美专区第一页| 国产精品久久久久免费a∨大胸| 久久综合伊人77777蜜臀| 亚洲在线免费观看| 亚洲成人a级网| 国产精品青草久久久久福利99| 欧美裸体xxxx极品少妇软件| 亚洲男人的天堂在线播放| 国产亚洲人成a一在线v站| 国产午夜精品全部视频播放| 欧美片一区二区三区| 亚洲国产精品成人va在线观看| 欧美亚洲激情在线| 国产精品高精视频免费| 亚洲男人天堂古典| 欧美亚洲视频在线看网址| 91在线观看免费网站| 亚洲人成电影网| 92版电视剧仙鹤神针在线观看| 欧美电影电视剧在线观看| 久久久久久久久久久亚洲| 亚洲性生活视频在线观看| 国产精品欧美一区二区三区奶水| 亚洲一区二区三区四区视频| 欧美在线日韩在线| 伦理中文字幕亚洲| 久久噜噜噜精品国产亚洲综合| 亚洲色在线视频| 日韩成人高清在线| 国外成人在线直播| 91精品久久久久久久久久久| 日韩理论片久久| 欧美专区日韩视频| 992tv成人免费视频| 在线色欧美三级视频| 亚洲人成在线电影| 久久亚洲国产精品成人av秋霞| 日韩精品在线免费观看| 国产亚洲精品久久久久久牛牛| 精品国产31久久久久久| 国产欧美日韩亚洲精品| 色av中文字幕一区| 国产一区二区三区在线观看视频| 亚洲国产精品va在线看黑人动漫| 92国产精品视频| 欧美体内谢she精2性欧美| 在线日韩av观看| 97精品欧美一区二区三区| 亚洲成人av中文字幕| 色青青草原桃花久久综合| 欧美成年人视频网站| 日韩欧美在线视频免费观看| 国产日韩欧美在线播放| 在线日韩精品视频| 成人网在线免费观看| 久久久久在线观看| 亚洲欧洲一区二区三区在线观看| 精品国产电影一区| 亚洲色图校园春色| 日韩美女视频免费看| 国产精品久久久久久久久久新婚| 欧美亚洲成人免费| 草民午夜欧美限制a级福利片| 日韩av快播网址| 日韩av网站在线| 国产精品福利小视频| 欧美日韩国产一区二区| 国产精品欧美风情| 91成人在线播放| 国产精品av免费在线观看| 日韩一区二区精品视频| 国产精品欧美亚洲777777| 日韩高清欧美高清| www高清在线视频日韩欧美| 亚洲电影av在线| 亚洲天堂av女优| 国产精品美女av| 91色琪琪电影亚洲精品久久| 午夜精品久久久久久久久久久久| 亚洲欧美视频在线| 日韩欧美在线视频日韩欧美在线视频| 全球成人中文在线| 亚洲在线观看视频| 成人免费xxxxx在线观看| 欧美激情综合亚洲一二区| 亚洲福利在线视频| 国产91精品久| 91av免费观看91av精品在线| 色播久久人人爽人人爽人人片视av| 欧美丰满少妇xxxx| 亚洲大胆美女视频| 国产69精品久久久久99| 亚洲最大福利视频网| 久久视频这里只有精品| 国产精品扒开腿做爽爽爽视频| 国产大片精品免费永久看nba| 日韩中文字幕国产精品| 57pao国产精品一区| 蜜臀久久99精品久久久久久宅男| 久热精品视频在线观看一区| 欧美高清视频在线观看| 国产精品99久久久久久久久| 亚洲免费电影一区| 国产精品免费福利| 38少妇精品导航| 91av在线看| 国产精品久久久久不卡| 国产不卡精品视男人的天堂| 欧美午夜视频一区二区| 亚洲精品免费一区二区三区| 日韩中文字幕亚洲| 精品二区三区线观看| 久久国产视频网站| 欧美国产日产韩国视频| 国产欧美va欧美va香蕉在线| 9.1国产丝袜在线观看| 亚洲视频在线视频| 亚洲最大的成人网| 亚洲人成在线观| 欧美日韩中文字幕在线视频| 亚洲成人免费网站| 亚洲日本欧美中文幕| xvideos亚洲人网站| 成人妇女免费播放久久久| 精品久久中文字幕久久av| 日韩在线视频网站| 国产在线播放91| 日韩av色在线| 亚洲国模精品一区| 国产精品福利久久久| 国产中文字幕91| 国产欧美在线视频| 国产精品2018| 国产美女精品视频免费观看| 亚洲欧洲在线看| 亚洲高清久久久久久| 欧美网站在线观看| 国产免费一区二区三区香蕉精| 在线日韩av观看| 色av吧综合网| 在线观看国产成人av片|