1,Angular是一個非常優秀的前端js框架,它是由谷歌團隊負責研發和維護的,通常用來構建單頁面應用。angular自身有很多顛覆性的特性,改變了前端的編碼格式,大大簡化了我們的工作。
2,Angular的核心思想:通過指令擴展 html ,通過表達式綁定數據到 html . angularjs不推崇dom操作,也就是說在ng中幾乎找不到任何dom操作,一切操作以數據為中心,用數據操作dom.
3, html和angularjs模塊的關系是:管理與被管理的關系,我們創建了angularjs模塊,通過模塊對象創建控制器,進而通過控制器去管理相應的區域。請參考下圖:
4,雙向數據綁定:我們通過anjularjs去監聽html頁面中文本框的值變化,將最新的值給到js中對應的變量,當這個變量發生變化時,angularjs又回去html頁面中查找誰在使用這個變量,找到后將變量更新為最新的值。實現雙向綁定的必要條件是必須要是表單元素,且設置了ng-model;
5,angularjs的一些語法整理:(前提:先引入angular.js )
(1)創建模塊:angular.module( '模塊名字' , [依賴模塊] )
(2)創建控制器:angular.controller('控制器名字',[ '$scope',function($scope){? } ])
(3)配置路由:有兩種方式:
第一種:angular-route :?
將ngRoute作為依賴模塊;
然后配置路由:模塊對象.config( function( $routeProvider){? ?
$routeProvider.when( '錨點值',{? template/templateUrl : "請求模版" }? ).when('錨點值',{? template/templateUrl : "請求模版" }? ).otherwise("默認錨點值")
?})
頁面中要有一個盒子設置屬性 ng-view然后情求到的內容會呈現在這個盒子中。
第二種:angular-ui-router:
將ui.router作為依賴模塊;
然后配置路由:模塊對象.config( function($stateProvider){
$stateProvider.state( { url:錨點值;template/templateUrl:"請求模版"; name:"路由名字" }).state({ url:錨點值;template/templateUrl:"請求模版"; name:"路由名字" })? ? ? })
頁面中要有一個盒子設置屬性 ui-view然后情求到的內容會呈現在這個盒子中。注意頁面鏈接中href屬性不能設置,應該設置 ui-sref ='路由名字'。
(4)自定義指令:模塊對象.directive( '指令名字',[ function(){
return {? ?
transclude:true;? // 是否保存原指令標簽內部的信息(不是模版中的信息)
template/templateUrl :"模版路徑";
restrict: ECMA //可以使用的指令類型:依次為:元素,類名,注釋,屬性
replace:true //是否刪除自定義標簽
scope: true / false / { }? //是否開辟一個局部作用域,自定義指令默認沒有作用域
link:function(scope,element,attributes){? ?dom操作? }
?}? ])
關于自定義指令有幾點需要說明;(1)scope 的取值:1-如果沒有寫這個屬性或者賦值為false,都是默認不開辟局部作用域,會繼承父級 ;2-如果賦值為true,會開辟一個局部作用域,也會繼承父級;3-如果賦值為一個對象 :則為隔離作用域。比如{msg : "@" },則@會去指令所在的元素身上找有沒有一個叫做msg的同名屬性,如果有,將同名屬性的值賦給當前指令內部的msg,通過@取到的數據,得到的結果都是字符串。如果是{ msg:"=" } ,情況和上面一樣,只不過此時msg原本是什么類型就得到什么類型 (2)link函數中的三個參數說明:三個形參可以隨意指定,不過注意語義化;第一個形參scope:向指令所在的模版內部暴露數據 ; 第二個參數element:當前指令所在的元素;第三個參數:當前指令所在元素身上的屬性集合;
今天先更新到這里,稍后繼續.........