精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

實踐總結:不可錯過的Angular應用技巧

開發 前端
在剛開始接觸或者使用Angular的時候,總會疑惑與類似的問題,我實踐的答案是不需要requirejs或者Yeoman.前者不使用,因為angular本身有module的實現.后者是因為Angular組織結構以及項目構建完全不必要弄得如此繁雜,手寫或者在github上pull一個seed項目即可.

angular的核心思想是通過數據驅動一切,其他東西都是數據的延伸.

套用Javascript一切皆對象的思想,在angular中可以說一切皆數據.

關于項目構建

(1) requirejs以及Yeoman

在剛開始接觸或者使用Angular的時候,總會疑惑與類似的問題,我實踐的答案是不需要requirejs或者Yeoman.前者不使用,因為angular本身有module的實現.后者是因為Angular組織結構以及項目構建完全不必要弄得如此繁雜,手寫或者在github上pull一個seed項目即可.

 

 

(2) 如何組織項目結構

這個問題有點廢材,因為完全因人因項目而異.個人推薦的是兩種組織結構,一種按照代碼功能,也就是controller都放在一個文件夾下,services都放在一個文件夾下.另一種則遵循所實現的功能,比如User就把對應的template,services,controller都放在User文件夾下.

兩種都可以,從維護角度上看第二種會更好一些.

(3) controller以及service的劃分

這里controller通常就是一個頁面一個controller,假如一個頁面有公共的部分,公共部分永遠使用一個controller.對于service要劃分成兩個部分,一個是于服務器交互數據的service,另一個是一些功能性common的內容,其中放置一些自己寫的可復用的服務,類似于notify等.

至于service要不要按照功能和模塊再進一步劃分,這個就看項目來了.

 

 

(4) Angular插件以及庫的使用

對于一個項目所有的東西都去網上拿現成的肯定不現實,但是所有的東西都自己寫就更不實際了.Angular的很多插件是由Angular團隊開發出來或者一些人用jquery插件封裝的.我對于插件的觀點很簡單,如果拿來用趕緊需求可以滿足就用,不能滿足就自己寫或者在已有插件上改進.

對于如果你調試幾個小時還搞不定的插件,聽我的勸,放棄它吧.大多數插件都是一些UI插件,大可不必追求繁雜,有時候簡簡單單的HTML控件也自有它簡約的美.

如果你遇到Angular插件沖突,尤其是UI插件,大多數的情況下要放棄其中之一,比如angular-ui和angular-strap.

使用技巧

下面進入正文,我會列舉出我在使用angular的過程中使用的一些技巧,會以場景的形式一一列舉.這里對于Angular的一些基礎概念我不會解釋,本文是一些技巧性的東西,不是基礎教程.

(1) angular中"{{}}"于Python的flask沖突

Python的flask使用的模板中,數據綁定也是通過兩個"{"大括號,這就于angular的數據綁定有沖突.這個有兩種解決方法,一種是修改angular的綁定標記,另一種就是修改flask的綁定標記,這里兩種方案都給出.

修改angular:

  1. $interpolateProvider.startSymbol('{[{').endSymbol('}]}');  
  2. // 將這句話加在config中即可,放在route的module中即可.這里將原來angular的{{ }}綁定,修改為通過{[{ }]}綁定. 

修改flask:

  1. class CustomFlask(Flask):  
  2.     jinja_options = Flask.jinja_options.copy()  
  3.     jinja_options.update(dict(  
  4.         block_start_string='{%',  
  5.         block_end_string='%}',  
  6.         variable_start_string='{#',  
  7.         variable_end_string='#}',  
  8.         comment_start_string='<#',  
  9.         comment_end_string='#>',  
  10.     ))  
  11.        
  12. app = CustomFlask(__name__, instance_path='/web'

這里我推薦修改flask,因為用了angular之后,前后端分離.flask的jinjia模板不再需要,同時如果你修改了Angular的綁定標記,其他的控件和庫會有問題的.

 

 

(2) 去除url中總是默認帶有"#"

在設置route的時候,開啟HTML5模式.

  1. angular.module('router', ['ngRoute'])  
  2. .config(['$routeProvider''$locationProvider',  
  3.   function($routeProvider, $locationProvider) {  
  4.     $locationProvider.html5Mode(true);   // 設置一下這句即可  
  5.   }  
  6. ]); 

3) ng-click="expression"以及類似的指令,如何在expression中書寫多個表達式?

比如我在一個ng-click中想要給2個變量賦值,通過";"分號分割即可:

  1. <a ng-click="obja=1;objb=2"></a> 

(4) $watch沒有產生作用或者只生效一次

 

這種情況一般來說是監聽一個字符串或者數字的時候會出現,$scope.$watch("name",function(){}).沒有生效或者只生效一次,解決方法是$watch盡量監聽的是一個對象,將你要監聽的值附在一個Object下即可.

 

當你使用angular-ui中的modal時,這個比較明顯.

 

 

(5) 希望ng-view的內容全頁面顯示

 

通常一個頁面可能會有固定的top-menu或者sidebar,這類固定不變的部分,然后每次route變化的都是ng-view的template,如果一個頁面希望整個頁面完全顯示它自己,不包括top-menu之類固定的部分.

 

這里通常是一個index.html和一個ng-view顯示的template.html,top-menu和sidebar位于index.html中,將它們的顯示隱藏通過ng-if綁定一個變量控制.

 

如果一個頁面需要自己完全顯示,不顯示sidebar等,則在其controller中通過$scope.$emit向上發送一個消息,然后index頁面的controller則通過$scope.$on監聽消息,一旦聽到那個消息,則改變控制sidebar顯隱的變量.

 

也可以通過service做一個全局的變量控制,個人推薦還是通過消息廣播的方式.

 

 

(6) 切記用ng-if代替ng-show

 

這是angular的一個小坑,也可以說是不大不小的一個坑.一些長列表數據,可能有一些東西是通過默認隱藏,點擊顯示的形式展現的.而這部分可控制顯隱的內容中也會伴隨很多數據綁定.這個在頁面渲染的時候非常影響性能.

 

舉一個列子,比如說通常angular建議一個頁面的數據綁定不超過2000個,假如現在有一個頁面直接綁定了2000個model,然后你加載,會發現非常卡.如果你將每100的model設置為ng-show,默認情況下不顯示,你會發現還是很卡.

 

然后你將所有的ng-show換成ng-if,你會發現性能瞬間快的像兩個應用.原因在ng-show還是會執行其中的所有綁定,ng-if則會在等于true,也就是顯示的時候再去執行其中的綁定.這樣一來性能就有很大的提高,我之前通過這個簡單的修改,頁面加載快了10倍左右.

 

所以在能使用ng-if的情況,用它代替所有的ng-show和ng-hide吧.
 

(7) 關于ng-bind-html

 

通常情況下為html元素綁定數據,有ng-bind就夠了,但一些情境下需要綁定的不是一般的數據,而是html.那么ng-bind就不夠用了,需要使用ng-bind-html,它會將內容作為html格式輸出.比如想輸出帶有class的html,那么就使用ng-bind-html,而且還需要ngSanitize的配合,需要引入相應的文件.

#p#

 

 

(8) 獲取ng-repeat數據filter后的結果

 

這個一般在搜索的時候需要用到,比如多重ng-repeat數據形成列表.然后filter一個字段,現在要得到filter之后的結果,有2中方式.

 

一種是在html的ng-repeat中類似這么寫:

  1. ng-repeat="food in foodCategory._displayfoods = (foodCategory.foods | filter: { 'name': searchobj.foodfilter } | orderBy: food.sort_order)" 

這樣_displayfoods就是filter后的最終顯示的結果.另一種方式是通過兩套數據,一套寫在controller中,然后filter以及orderBy都是在controller中操作,***操作的結果在用來ng-repeat.

***種方式比較方便,第二種方式更好,性能也好.

 

 

(9) ng-class以及ng-style通過判斷賦值

 

根據變量的值決定是否應用某種class,以及不同的style樣式.

  1. ng-class="{'state-error':!foodForm.foodstock.$valid}" 
  2.  
  3. ng-style="{ color: i.color=='' || i.name=='活' ? 'default' : '#fff' }" 

 

 

(10) form校驗以input為例

 

angular的form可以通過input的HTML5屬性進行校驗,這里主要通過form以及input的name屬性進行鎖定,formname.inputname.$valid表示name為inputname的空間是否通過本身的屬性校驗.

 

 

(11) $resource和$http的$promise

  1. $q.all([  
  2.   resource.query().$promise,  
  3.   resource2.query().$promise  
  4. ]).then(functon(success){  
  5.   console.log(success);  
  6. },functon(error){  
  7.   console.log(error);  
  8. }); 
  1. foodFactory.food.save(f).$promise.then(function(result){  
  2.   foodFactory.food.get({id:result.id}).$promise.then(function(data){  
  3.   });  
  4. }); 

這個不解釋了,直接看就可以了,注意$http的promise需要手動返回,所以一般情況下都通過$resource.

 

 

(12) 僅$watch監聽collection中的一個屬性

$watch的第三個參數設置為true,即可deep watch.不過有時候其實不想或者不需要監聽collection的全部屬性.只要監視其中的一個或者幾個,這時候通過for循環雖然可以循環$watch不過明顯太挫.

通過下面這種寫法就可以監控一個collection的單獨一個object屬性.

  1. $scope.people = [  
  2.     {  
  3.         "groupname""g1",   
  4.         "persions": [  
  5.             {  
  6.                 "id": 1,   
  7.                 "name""bill" 
  8.             },   
  9.             {  
  10.                 "id": 2,   
  11.                 "name""bill2" 
  12.             }  
  13.         ]  
  14.     },   
  15.     {  
  16.         "groupname""g2",   
  17.         "persions": [  
  18.             {  
  19.                 "id": 3,   
  20.                 "name""bill3" 
  21.             },   
  22.             {  
  23.                 "id": 4,   
  24.                 "name""bill4" 
  25.             }  
  26.         ]  
  27.     }  
  28. ]  
  29.    
  30. $scope.$watch(function($scope) {  
  31.     return $scope.people.map(function(obj) {  
  32.         return obj.persions.map(function(g){  
  33.             return g.name  
  34.         });  
  35.     });  
  36. }, function (newVal) {  
  37.     $scope.count++;  
  38.     $scope.msg = 'person name was changed'+ $scope.count;  
  39. }, true); 

(13) debounce防抖處理

 

這個對于頻繁出發的處理非常有用,適用于類似ng-change,$watch的一些場景.比如根絕關鍵字即時搜索的場合,將$debounce封裝為服務,直接調用接口,代碼:http://jsfiddle.net/Warspawn/6K7Kd/

 

 

(14) 快速定位到某個位置

一般來講頁面內通過<a id="bottom"></a>這樣的形式就可以結合js代碼,實現快速定位.在angular中也是通過類似的原理實現,代碼如下:

  1. var old = $location.hash();  
  2. $location.hash('batchmenu-bottom');  
  3. $anchorScroll();  
  4. $location.hash(old); 

 

這樣寫是因為直接location.hash會導致url變化,頁面跳轉,所以加了防止跳轉的代碼.

暫時就總結了這么多,很多東西都是查資料以及自己實踐的,希望對需要的TX會有所幫助,以后如果有新的東西會續寫一下.

原文鏈接:http://my.oschina.net/blogshi/blog/293631

責任編輯:林師授 來源: 頑Shi的博客
相關推薦

2019-07-23 09:00:00

vuejavascript前端

2015-07-06 10:09:33

iosFoundationNSHashTable

2015-07-07 10:15:56

iOSUIVisualEffweak

2015-07-07 14:05:22

iOS技巧

2015-10-21 13:42:54

iOS開發watch OS2

2013-02-18 11:31:03

移動商務智能應用移動信息化

2024-01-09 18:01:38

2024-08-13 08:00:00

2021-10-27 08:00:00

DevSecOps開發安全

2015-07-28 20:34:01

Android開發框架

2010-01-27 17:45:15

Android應用技巧

2011-04-21 15:33:23

2023-08-03 07:44:09

MSBuild.NET

2020-03-05 12:12:54

數據Python開發

2009-12-28 15:01:39

WPF樹應用

2009-11-18 18:24:26

PHP模板

2009-11-17 11:24:00

PHP應用技巧

2018-10-23 10:35:20

react.jsReact面試題前端

2021-01-05 05:15:02

Github 前端倉庫

2015-04-01 10:55:55

點贊
收藏

51CTO技術棧公眾號

精品亚洲一区二区三区四区五区高| 高清欧美性猛交xxxx黑人猛交| 天美星空大象mv在线观看视频| 爱久久·www| 免费视频最近日韩| 久久久av网站| 精品无码在线视频| 久久精品国产精品亚洲毛片| 亚洲九九爱视频| 久久久久九九九| 一级黄色a毛片| 亚洲人成久久| 日韩在线播放视频| 午夜一区二区三区免费| 不卡一区视频| 在线欧美日韩国产| 激情成人开心网| 成人亚洲综合天堂| 成人av免费网站| 国产欧美 在线欧美| 日韩成人免费在线视频| 国产精品99久久久久久动医院| 亚洲成人性视频| 亚洲欧美日韩综合网| 妞干网免费在线视频| 国产精品久久久久天堂| 久久99精品久久久久久久久久 | 精品久久久久久久久久| 亚洲自拍的二区三区| 天天综合在线视频| 国产激情91久久精品导航| 国产精品免费看久久久香蕉| 国产成人在线免费视频| 最新国产精品久久久| 国产一区二区欧美日韩| 魔女鞋交玉足榨精调教| y111111国产精品久久久| 欧美肥胖老妇做爰| 91看片在线免费观看| 玛雅亚洲电影| 精品久久久免费| 国产freexxxx性播放麻豆 | 国产精品色婷婷久久58| 久久大香伊蕉在人线观看热2| 国产成人精品无码高潮| 久久精品国产精品亚洲综合| 欧美资源在线观看| 午夜精品三级久久久有码| 欧美精品偷拍| 色综合久久精品亚洲国产| 国产福利视频网站| 亚洲九九视频| 久青草国产97香蕉在线视频| 国产小视频你懂的| 日韩精品四区| 中文字幕亚洲欧美日韩2019| 国产黄色片在线| 日韩中文在线电影| www.久久色.com| 日韩在线观看免| 久久精品国内一区二区三区水蜜桃 | 黄大色黄女片18第一次| 91麻豆精品国产综合久久久| 欧美日韩精品电影| 亚洲视频在线不卡| 51精品国产| 亚洲第一精品夜夜躁人人爽| www.88av| 国产一区二区在线| 色偷偷91综合久久噜噜| 极品盗摄国产盗摄合集| 欧美涩涩视频| 欧美怡红院视频一区二区三区| 国产91国语对白在线| 日本va欧美va精品发布| 91久久精品国产91久久性色| 超碰在线观看99| av在线免费不卡| 久久综合福利| 欧美激情办公室videoshd| 亚洲综合在线观看视频| 免费无码不卡视频在线观看| 日韩av首页| 制服丝袜激情欧洲亚洲| 亚洲成人激情小说| 亚欧日韩另类中文欧美| 少妇高潮久久久久久潘金莲| 欧美精品一级片| 亚洲一区二区动漫| 国产一区私人高清影院| 欧美一级特黄aaaaaa大片在线观看| 91理论电影在线观看| 亚洲日本japanese丝袜| 国产高清在线a视频大全| 精品久久久久国产| а 天堂 在线| 欧美深夜视频| 久久久999国产精品| 日本三级视频在线| 男女视频一区二区| 国产精品一区二区av| 91亚洲欧美| 亚洲动漫第一页| 久久久久国产一区| 欧美黑人做爰爽爽爽| 俺去啦;欧美日韩| 探花视频在线观看| 国产高清不卡二三区| 日本一区二区三区www| 性xxxfreexxxx性欧美| 欧日韩精品视频| 亚洲日本久久久| 小小影院久久| 国产精品wwwwww| 特黄视频在线观看| 亚洲私人黄色宅男| 欧美日韩怡红院| 欧美电影在线观看免费| 欧美黄色小视频| 国产一区二区麻豆| 久久久午夜电影| 黄色大片中文字幕| 日韩免费精品| 日韩亚洲精品电影| 国产91av在线播放| 91麻豆视频网站| 国产自产在线视频| 91国产一区| 色偷偷888欧美精品久久久| www亚洲视频| jlzzjlzz亚洲日本少妇| 国产精品国产三级国产专区51| 欧美少妇激情| 在线精品国产欧美| 一区二区乱子伦在线播放| 2欧美一区二区三区在线观看视频| 久久男人资源站| 欧美经典一区| 欧美精品情趣视频| 国产精品久久久午夜夜伦鲁鲁| 国产欧美一区二区三区沐欲| 亚洲人成无码www久久久| 色婷婷久久久| 欧美诱惑福利视频| 欧美精品a∨在线观看不卡| 午夜电影一区二区三区| 国产精品九九视频| 日韩亚洲国产欧美| 久久另类ts人妖一区二区| 成人免费网站观看| 亚洲成人国产精品| 色婷婷在线观看视频| 波多野洁衣一区| 欧美一级视频在线播放| 国产精品色在线网站| 韩国国内大量揄拍精品视频| 老牛影视av牛牛影视av| 亚洲国产日韩a在线播放| 中文字幕第3页| 99国产精品| 蜜桃网站成人| 福利一区和二区| 久久久精品免费| 不卡的日韩av| 五月婷婷综合网| 中文字幕一区二区人妻在线不卡| 亚洲欧美高清| 午夜老司机精品| 综合欧美精品| 欧美大片免费观看| 天堂在线中文字幕| 91成人免费电影| 青花影视在线观看免费高清| 大桥未久av一区二区三区中文| 鲁一鲁一鲁一鲁一色| 国产亚洲一区| 91久久久在线| 黄色在线免费观看网站| 国产一区二区三区三区在线观看| 国产精品探花视频| 亚洲国产精品久久人人爱| 免费在线观看你懂的| 精品一区二区免费看| 欧美亚洲色图视频| 神马影视一区二区| 91在线免费看网站| 小h片在线观看| 日韩在线中文字幕| 欧洲av在线播放| 在线免费av一区| 五月婷婷一区二区| 久久久久国色av免费看影院| 182午夜视频| 99亚洲视频| 在线电影看在线一区二区三区| 国产乱论精品| 国产精品欧美日韩一区二区| 好久没做在线观看| 中文字幕日本欧美| 四虎影视精品成人| 欧美一区二区视频网站| 日韩综合在线观看| 亚洲一区二区偷拍精品| 山东少妇露脸刺激对白在线| 成人精品一区二区三区四区| www.久久久精品| 亚洲片区在线| 97超碰人人爱| 欧美视频网址| 久久99久久精品国产| 国产不卡精品| 国产精品青草久久久久福利99| av最新在线| 欧美大尺度激情区在线播放| 国产福利第一视频在线播放| 亚洲电影免费观看高清完整版在线| 一级特黄aaa大片| 色94色欧美sute亚洲线路一ni | 中文字幕日本在线观看| 日韩禁在线播放| 亚洲精品国产手机| 制服丝袜中文字幕亚洲| 午夜一级黄色片| 欧美三级免费观看| 国产精品999久久久| 亚洲精品视频在线观看网站| 欧美激情久久久久久久| 久久久久国产精品人| 中文字幕在线永久| 国产成人av电影免费在线观看| 中文字幕66页| 老司机一区二区| 男女污污的视频| 丝袜诱惑制服诱惑色一区在线观看| 波多野结衣家庭教师在线| 亚洲一级电影| 国产一区二区四区| 狠狠88综合久久久久综合网| 大胆欧美熟妇xx| 欧美精品一区二区三区久久久竹菊| 中文字幕一区二区三区有限公司| 成人亚洲一区二区| 亚洲精品欧美精品| 四虎成人精品永久免费av九九| 日韩精品欧美一区二区三区| 九一亚洲精品| 日本10禁啪啪无遮挡免费一区二区| 午夜精品福利影院| 久久婷婷人人澡人人喊人人爽| 免费看久久久| 久久精品国产综合精品 | 亚洲精品成人久久| 香蕉视频国产在线| 亚洲精品乱码久久久久久按摩观| 天堂网在线资源| 日韩精品视频免费在线观看| 欧美69xxxxx| 正在播放亚洲1区| 国产精品久久麻豆| 九九热精品视频| av影院在线免费观看| 91精品国产91久久久久久吃药| 电影一区二区三区| 国产精品av电影| 永久免费观看精品视频| 亚洲综合精品伊人久久| 国产精品成人自拍| 精品国产综合| 精品国产一区二区三区噜噜噜| 亚洲精品自在在线观看| 一区二区国产在线| 婷婷无套内射影院| 巨乳诱惑日韩免费av| 欧美一级xxxx| 成人午夜视频在线| 国产激情在线免费观看| 国产精品久久久99| 国产一级在线免费观看| 色伊人久久综合中文字幕| 6—12呦国产精品| 精品国产精品网麻豆系列| 欧美成熟毛茸茸| 色999日韩欧美国产| 天堂va在线| 欧洲精品在线视频| 国产电影一区| 久久婷婷开心| 影音先锋日韩精品| 国产在线青青草| 国产原创一区二区三区| 亚洲国产欧美视频| √…a在线天堂一区| 国产一级精品视频| 欧美片网站yy| 色久视频在线播放| 欧美老肥婆性猛交视频| 怡红院成人在线| 99高清视频有精品视频| 日韩精品2区| 狠狠97人人婷婷五月| 久草这里只有精品视频| 精品夜夜澡人妻无码av| 一区二区三区不卡视频| 日本中文字幕在线观看视频| 日韩精品一区二区三区视频在线观看| 国产在线高清| 午夜精品一区二区三区av| 99视频这里有精品| 欧美日韩视频在线一区二区观看视频| 欧美在线二区| 香蕉视频禁止18| www欧美成人18+| 国产亚洲欧美久久久久| 8v天堂国产在线一区二区| 国产精品ⅴa有声小说| 97超视频免费观看| 欧美久久亚洲| 久久免费看毛片| 强制捆绑调教一区二区| a视频免费观看| 亚洲成av人在线观看| www.狠狠干| 久久视频在线直播| 日韩成人精品一区二区三区| 欧美日韩一区在线播放| 亚洲欧洲日本mm| 性高潮久久久久久| 亚洲色图视频网| 中文字幕在线播放不卡| 亚洲欧美精品中文字幕在线| 三级中文字幕在线观看| 国产精品二区在线| 欧美福利影院| www.色就是色.com| 国产精品天干天干在观线 | 欧美剧在线免费观看网站| 国产在线观看网站| 国产成+人+综合+亚洲欧洲 | 亚洲欧洲精品在线观看| 日韩二区三区在线观看| 亚洲自拍偷拍图| 欧美综合一区二区| 国产h视频在线观看| 国产精品久久久久久久久| japanese国产精品| 美女少妇一区二区| 最新日韩在线视频| 国产日韩免费视频| 欧美人与性动交| 粉嫩av一区二区| 久久久久久久午夜| 97久久久精品综合88久久| 欧美日韩乱国产| 亚洲午夜久久久影院| 成人免费黄色| 强开小嫩苞一区二区三区网站| 国产伦精品一区二区三区免费| 澳门黄色一级片| 亚洲成人激情在线观看| 日韩欧美精品一区二区三区| 日本在线视频不卡| 精品一区二区三区在线观看国产| √天堂中文官网8在线| 精品国产伦理网| 97se综合| 一区二区91美女张开腿让人桶| 国产一区欧美一区| 国产亚洲色婷婷久久99精品| 日韩不卡中文字幕| 日韩制服诱惑| 在线观看污视频| 99免费精品在线| 91视频在线视频| 麻豆成人在线看| 天堂成人娱乐在线视频免费播放网站| 国产第一页视频| 日韩毛片一二三区| 欧美在线精品一区二区三区| 国产精品99久久久久久白浆小说| 99久久久国产精品美女| 亚洲精品第二页| 欧美日韩综合在线| 欧美人与牲禽动交com| 美媛馆国产精品一区二区| 激情综合色综合久久综合| 国产一级做a爱片久久毛片a| 波霸ol色综合久久| 欧美日韩一区二区三区四区不卡| 依人在线免费视频| 亚洲成年人网站在线观看| 91在线网址| 精品欧美一区二区三区久久久| 久久99久久久久| 特一级黄色大片| 久久久久999| 久久不见久久见国语| 又大又长粗又爽又黄少妇视频| 日韩欧美在线免费| 日韩欧美一起| 亚洲午夜精品国产|