AngularJs的一些知识点-1
生活随笔
收集整理的這篇文章主要介紹了
AngularJs的一些知识点-1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 作用域層級
- ng-controller指令會調用scope的$new()方法創造一個scope的實例$scope(作用域實例)。
- Angular擁有$rootScope,它是其他所有作用域的父級作用域,將會在應用啟動(加載模塊)時自動創建。
- 變量會沿著作用域向下繼承。(也就是說子作用域可以訪問到父作用域的變量等)
- $scope會擁有$parent屬性,這個屬性會指向父級作用域。
- 每個作用域實例($scope)都有$on方法,用來注冊作用域事件的處理器。
2. 路由
- 原理:
- 哈希#
- HTML5中新的history API
- 作用:
- 防止瀏覽器向后臺發起請求
- 為angular提供識別標識
- angular會獲取到當前url并且將#后面的字段截取到與when()中參數進行比較。
感覺路由很像ajax刷新局部頁面,經過試驗在network里果然發現了xhr請求
3. angular模塊
- angular自身提供了模塊化功能
- 在angular中一切都是從模塊開始,通過注入依賴將很多個模塊鏈接起來,形成一個大的模塊。
- 如果有多個控制器,而每個控制器負責不同的功能但是卻有部分相同的代碼邏輯需求怎么辦?
- 通過angular中的服務解決。
- 可以把服務當做一個單獨模塊,然后給需要的控制器們注入依賴,就可以在它們里面使用注冊過的服務了。
- 官方推薦的模塊切分:如下目錄結構(個人理解)
官方版如下:
. app|----------------------------------------------- | | | | | controllers directives services routes filters4. angular中的bind和表達式
- 表達式對應的添加類名’ng-cloak’。
- 在主頁面用ng-bind其他的模板頁面(片段html)用表達式。
5. 指令
指令執行的三個階段 & compile和link:
- 加載階段:加載angular.js,找到ng-app指令,確定應用的邊界
- 編譯階段:
- 遍歷DOM,找到所有指令;
- 根據指令代碼中的template、replace、transclue轉換DOM結構
- 如果存在compile函數則調用
- 鏈接階段:
- 對每一條指令運行link函數
- link函數一般用來操作DOM,綁定事件監聽器
- 關于compile和link:、
- compile函數用來對模板自身進行轉換,而link函數負責在模型和視圖之間進行動態關聯;
- 作用域在鏈接階段才會被綁定到編譯之后的link函數上
- compile函數僅僅在編譯階段運行一次,而對于指令的每個實例,link函數都會執行一次
- compile可以返回preLink和postLink函數,而link函數只會返回postLink函數
- 如果需要修改DOM結構,應該在postLink中來做這件事情,而如果在preLink中做這件事情會導致錯誤
- 大多數時候我們只要編寫link函數即可
link相關
- 解釋:當directive被angular 編譯后,執行該方法。
- link后跟隨的方法中的參數解釋:
- scope:angular中的scope對象
- element:當前觸發函數的元素
- attrs:attrs是個map,內容是你這個directive上的所有屬性
- 當directive中只有一個link函數可以直接返回匿名function
創建controller和directive的時候,會自動創建自己的私有scope對象,私有scope從rootScope繼承.
在默認的情況下,directive不會創建他們自己的scope.他們會用他們父對象的scope作為自己的scope. 但是 angularjs 允許改變這種默認行為。
注釋做自定義指令的注意點
還有一點,經過實驗不能用大駝峰命名指令
<div ng-app="apps"><!--directive:my-de --> </div> let apps=angular.module('apps',[]);apps.directive('myDe',() => {return{restrict:'M',replace:true,template:'<h1>dgfrhfgdh</h1>'}})8. derective下的scope對象
實際上給我感覺都是用屬性去接收。
7. ng-include和ng-view
8. survice的特性
Service,Factory,Provider本質上都是Provider
9.templateUrl和template:$templateCache
- 兩者都可以復用同一套模板,那么實際應用中有什么區別呢?
- angular的模板獲取:AngularJS的模板tpl通過XHR下載
- 在實際中,如果使用templateUrl會默認需要時從規定的路徑去取。實際上一個模板如果被重復需要,就會重復請求獲取。而使用template:$templateCache可以允許$http 服務緩存經過XHR的模板請求,這樣它們就只會被請求一次。當一個模板被取到了,它的內容就會存儲在 $templateCache 中。
10.directive中template下的replace和transclude的用法
11. ui.router
- go(to,params,options)
- to:(string),即將跳轉的狀態。
- params:(object),跳轉所帶的參數。
- options:(object),可選配置對象。有location(是否更新地址欄的url,或以什么字符串替換url),inherit(是否繼承當前url的參數),relative(url相對路徑:如”^”,指代相對的父級,”.”指代相對的子級),notify(是否廣播$stateChangeStart和\$stateChangeSuccess事件),reload(是否重新載入)。
go方法表現是重新走路由配置(根據state)
$state.go('xxx');- reload(state):重新載入當前狀態的方法。
- state:一個狀態名稱或者狀態對象。
reload方法表現是在原有view中重載指定路由的請求
$state.reload('xxx');get(stateOrName,context):返回任何指定的狀態或所有狀態的配置對象。
- stateOrName:如果提供此參數,返回的是指定狀態的配置對象;如果不提供此參數,則返回全部狀態的配置對象。
context:當context是一個相對的參考狀態,狀態會在相關上下文中檢索。
- 屬性
params
在$rootScope.$on()中監聽事件變化
$rootScope.$on('xxx事件',function(){your code ... })12. 事件廣播
一般共享的方法放在服務中通過注入使用…
| event.targetScope | 發出或者傳播原始事件的作用域 |
| event.currentScope | 目前正在處理的事件的作用域 |
| event.name | 事件名稱 |
| event.stopPropagation() | 一個防止事件進一步傳播(冒泡/捕獲)的函數(這只適用于使用$emit發出的事件) |
| event.preventDefault() | 這個方法實際上不會做什么事,但是會設置defaultPrevented為true。直到事件監聽器的實現者采取行動之前它才會檢查defaultPrevented的值。 |
| event.defaultPrevented | 如果調用了preventDefault則為true |
總結
以上是生活随笔為你收集整理的AngularJs的一些知识点-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis框架下Service层引入
- 下一篇: 开源协议。