ng-if跟ng-show/hide的區(qū)別有哪些?
- 1.ng-if在表達(dá)式為true的時(shí)候才創(chuàng)建DOM節(jié)點(diǎn)掠手,ng-show是初始化時(shí)就創(chuàng)建用display:none與display:block來(lái)控制顯示和不顯示
- 2.ng-if會(huì)(隱式的)產(chǎn)生新作用域官帘,ng-switch豌鸡、ng-include等會(huì)動(dòng)態(tài)創(chuàng)建一塊界面的也是如此躯砰,這樣會(huì)導(dǎo)致ng-if用基本變量綁定ng-model不會(huì)進(jìn)行雙向綁定,因?yàn)榇藭r(shí)已經(jīng)是兩個(gè)變量了
- 3.ng-if是控制DOM節(jié)點(diǎn)的增加先壕、刪除實(shí)現(xiàn)的
ng-repeat重復(fù)數(shù)組時(shí)有相同值
- 用track by $index來(lái)解決
filter過(guò)濾器
- date 日期
- currency 貨幣
- limitTo 限制數(shù)組或字符串長(zhǎng)度
- orderBy 排序
- lowercase 小寫(xiě)
- uppercase 大寫(xiě)
- number 格式化數(shù)字
- filter 處理一個(gè)數(shù)組 過(guò)濾含有某個(gè)字符串的元素
- json 格式化Json對(duì)象
- filter有兩種使用方法,
- 1.在頁(yè)面里
- 2.在js里 $filter
自定義服務(wù)的幾種方式
- $factory:把service的方法和數(shù)據(jù)放到創(chuàng)建的一個(gè)對(duì)象里谆甜,并且返回這個(gè)對(duì)象
- $service:通過(guò)構(gòu)造函數(shù)new創(chuàng)建出來(lái)service 返回一個(gè)實(shí)例化對(duì)象,this指向不一樣
- $provider:可以傳進(jìn).config()函數(shù)的service,當(dāng)想要在service對(duì)象啟用之前垃僚,先進(jìn)性模塊范圍的配置,應(yīng)該用provider
angular雙向數(shù)據(jù)綁定機(jī)制
- 臟檢查機(jī)制
- 當(dāng)處理事件時(shí) 觸發(fā)$digest流程 從rootscope開(kāi)始循環(huán)遍歷规辱,檢查所有$watch進(jìn)行數(shù)據(jù)更新
- $digest循環(huán)的上限是10次(超出后拋出異常)
- click事件產(chǎn)生一次更新的操作(至少觸發(fā)兩次$digest循環(huán))
angular模塊(組件)之間的通信
- 第一種是借助父 controller谆棺。在子 controller 中向父 controller 觸發(fā)( $emit )一個(gè)事件,然后在父 controller 中監(jiān)聽(tīng)( $on )事件罕袋,再?gòu)V播( $broadcast )給子 controller 改淑,這樣通過(guò)事件攜帶的參數(shù)碍岔,實(shí)現(xiàn)了數(shù)據(jù)經(jīng)過(guò)父 controller,在同級(jí) controller 之間傳播朵夏。
- 2.service
- 3.$rootScope
angular 應(yīng)用常用哪些路由庫(kù)蔼啦,各自的區(qū)別是什么?
- ng-Route 仰猖、ui-Router
- ng-Route是angular自帶路由模塊
- ui-router 是基于ng-route開(kāi)發(fā)的第三方模塊
- ui.router 是基于 state (狀態(tài))的
- ngRoute 是基于 url 的
- ui.router模塊具有更強(qiáng)大的功能捏肢,主要體現(xiàn)在視圖的嵌套方面。
- 使用 ui.router 能夠定義有明確父子關(guān)系的路由亮元,并通過(guò) ui-view 指令將子路由模版插入到父路由模板的 <div ui-view></div> 中去猛计,從而實(shí)現(xiàn)視圖嵌套。而在 ngRoute 中不能這樣定義爆捞,如果同時(shí)在父子視圖中 使用了 <div ng-view></div> 會(huì)陷入死循環(huán)奉瘤。
- 詳述 angular 的 “依賴(lài)注入”
- 賴(lài)注入是一種軟件設(shè)計(jì)模式,目的是處理代碼之間的依賴(lài)關(guān)系煮甥,減少組件間的耦合盗温。
- 原理:AngularJS是通過(guò)構(gòu)造函數(shù)的參數(shù)名字來(lái)推斷依賴(lài)服務(wù)名稱(chēng)的,通過(guò) toString() 來(lái)找到這個(gè)定義的 function 對(duì)應(yīng)的字符串成肘,然后用正則解析出其中的參數(shù)(依賴(lài)項(xiàng))卖局,再去依賴(lài)映射中取到對(duì)應(yīng)的依賴(lài),實(shí)例化之后傳入双霍。
解釋下什么是$rootScrope以及和$scope的區(qū)別砚偶?
- 俗的說(shuō)$rootScrope 頁(yè)面所有$scope的父親。
Angular Directive中restrict 中分別可以怎樣設(shè)置洒闸?scope中@,=,&有什么區(qū)別染坯?
- ECMA
- 在scope中,@,=,&在進(jìn)行值綁定時(shí)分別表示
- @獲取一個(gè)設(shè)置的字符串丘逸,它可以自己設(shè)置的也可以使用{{yourModel}}進(jìn)行綁定的;
- = 雙向綁定单鹿,綁定scope上的一些屬性;
- & 用于執(zhí)行父級(jí)scope上的一些表達(dá)式深纲,常見(jiàn)我們?cè)O(shè)置一些需要執(zhí)行的函數(shù)
優(yōu)化 Angular 應(yīng)用的性能
- 減少監(jiān)控項(xiàng)(比如對(duì)不會(huì)變化的數(shù)據(jù)采用單向綁定)
- 主動(dòng)設(shè)置索引(指定 track by仲锄,簡(jiǎn)單類(lèi)型默認(rèn)用自身當(dāng)索引,對(duì)象默認(rèn)使用 $$hashKey湃鹊,比如改為 track by item.id)
- 降低渲染數(shù)據(jù)量(比如分頁(yè)儒喊,或者每次取一小部分?jǐn)?shù)據(jù),根據(jù)需要再缺液恰)
- 數(shù)據(jù)扁平化(比如對(duì)于樹(shù)狀結(jié)構(gòu)澄惊,使用扁平化結(jié)構(gòu),構(gòu)建一個(gè) map 和樹(shù)狀數(shù)據(jù),對(duì)樹(shù)操作時(shí)掸驱,由于跟扁平數(shù)據(jù)同一引用肛搬,樹(shù)狀數(shù)據(jù)變更會(huì)同步到原始的扁平數(shù)據(jù))