前端MVC框架之 Angular


一、什么是Angular

  • jQuery,它屬於一種類庫(一系列函數的集合),以DOM為驅動核心;而Angular是一種 MVC 的前端框架,則是前端框架,以數據和邏輯為驅動核心,它有着諸多特性,最重要的是:模塊化,雙向數據綁定,語義化標簽,依賴注入等。
  • MVC 開發模式:model(模型),view(視圖),controller(控制器)。

二、模塊化

最大程度實現代碼復用
定義應用
  • 為HTML標簽添加 ng-app 屬性,表明整個文檔都是應用,也可指定標簽添加,該標簽包裹的所有內容都是應用的一部分(++注:沒有關聯相應模塊,一定不能賦值;但如果關聯相應模塊,必須賦值++)
定義模塊
  • 提供一個全局對象Angular,用angular.module(參數1,參數2)方法定義模塊,輸出一個返回值。
  • 第一個參數:跟ng-app的值一致;
  • 第二個參數:數組。表明該模塊依賴其他模塊,依賴不存在則寫 [ ];
定義控制器(view和model的橋梁)
  • 定義模塊輸出的返回值.controller(參數1,參數2)。
  • 第一個參數:控制器名稱(++確定與view的關聯++,在HTML標簽添加ng-controller:控制器名稱);
  • 第二個參數:為一個數組,除了最后一個單元是函數,其余都是字符串,該參數表明控制器的依賴關系。

三、指令

  • 常用內置指令

    1.ng-app 指定應用根元素,至少有一個元素指定了此屬性。

    2.ng-controller 指定控制器

    3.ng-show 控制元素是否顯示,true顯示、false不顯示(通過display:none/block來控制)

    4.ng-hide 控制元素是否隱藏,true隱藏、false不隱藏

    5.ng-if 控制元素是否“存在”,true存在、false不存在(與ng-show區別:當為false的時候,連同整個DOM節點都不存在)

    6.ng-src 增強圖片路徑

    7.ng-href增強地址

    8.ng-class 控制類名 (后面可接對象,如ng-class="{done: true}")

    9.ng-include 引入模板

    10.ng-disabled 表單禁用

    11.ng-readonly 表單只讀

    12.ng-checked 單/復選框表單選中

    13.ng-selected 下拉框表單選中

  • 自定義指令

    • directive

四、數據綁定

單向綁定
  • 只能是模型數據向視圖傳遞(類似artTemplate模板引擎的工作方式)
  • 相關指令:
    • 通過 {{}} 或者 ng-bind 來實現模型數據向視圖模板的綁定,模型數據由一個內置服務$scope提供,它是個空對象,通過為這個對象添加屬性或方法,便可以在相應的視圖模板里被訪問。
    • 這里的 {{}} 是 ng-bind 的簡寫形式,區別在於通過 {{}} 綁定數據時會出現閃屏,添加添加 ng-cloak 也可以解決“閃爍”現象。
雙向綁定
  • 視圖 -->傳到 模型上 -->再傳回視圖
  • 相關指令:
    • ng-model
  • 舉一個小例子:
    <body ng-app>
	<input type="text" ng-model='mesg'>
	<h1>{{mesg}}</h1>
</body>
初始化模型(既初始化$scope)
  • ng-init (很少用)。
事件處理
  • 無需顯式的獲取DOM元素便可添加事件
  • 在原有事件前面添加前綴“ng”,然后以屬性的形式添加到HTML便簽中,例如:ng-click
數據處理
  • 相關指令:
    • ng-repeat: 可以將數組或對象數據迭代到視圖模板中
    • ng-switch 和 ng-switch-when 配合使用

五、作用域

  • 每個controller下的$scope產生不同的作用域
  • 根作用域:ng-app所在的標簽內

六、過濾器

  • 內置過濾器
    • currency[貨幣] 將數值格式化為貨幣格式
    • date 日期格式化,年(y)、月(M)、日(d)、星期(EEEE/EEE)、時(H/h)、分(m)、秒(s)、毫秒(.sss),也可以組合到一起使用。
    • filter 在給定數組中選擇滿足條件的一個子集,並返回一個新數組,其條件可以是一個字符串、對象、函數
    • json 將Javascrip對象轉成JSON字符串。
    • limitTo 取出字符串或數組的前(正數)幾位或后(負數)幾位
    • lowercase 將文本轉換成小寫格式
    • uppercase 將文本轉換成大寫格式
    • number 數字格式化,可控制小位位數
    • orderBy 對數組進行排序,第2個參數是布爾值可控制方向(正序或倒序)
  • 自定義過濾器
    • 通過模塊對象實例提供的filter方法自定義過濾器
  • 總結
    • 豎線調用,冒號傳值。

七、依賴注入

  • 通過注入的方式解決依賴問題,通過回調函數的參數來實現。
  • 常見AngularJS內置服務:$http、$http、$location、$timeout、$rootScope
  • 分類:
    • 行類式
    • 推斷式(不建議使用,代碼壓縮后,參數無法找到,無法找到依賴)

八、服務

  • 內置服務
    • $Timeout 和 $interval與原生JS區別,不需要每次手動開啟臟值檢查,即$scope.$digest()
    • 是對原生JS的封裝
    • 常見內置服務:
      • $http 向服務器端發起異步請求(注意前后端言行(接收/發送)一致)

        • post的請求方式:對應數據用data,
        • post要有個請求頭headers,這里headers的值用{}括起來,angularJS默認是'application/json'。發送請求頭有兩種格式來傳送數據(注意:php中$_POST[ ]只能接收formData格式數據的application/x-www-form-urlencoded這一種格式的數據)
          • 'Content-Type', 'application/x-www-form-urlencoded',該格式發送的參數為字符串key=value格式,例如"username=zhangsan".
          • 'Content-Type', 'application/json',該格式發送的參數為json格式,例如{"username":"zhangsan"}
        • get的請求方式:對應數據用params,ps:服務器端接收$_GET[], 在success中打印$log.info(ret)可以檢查數據是否傳到服務器。
        • 1.5.8之前的版本,回調函數用success(),error();1.6版本之后的版本用then()
        • 跨域
          • jsonp 用一句話概括,前端發送一個事先定義好的函數名給服務端,服務端接收這個函數名並拼湊“()”,並返回;前端就接收了一個函數的調用
          • method: "jsonp" ,params:{ callback:"JSON_CALLBACK" },其中JSON_CALLBACK為臨時定義的函數名發給服務端,讓服務端替換(注:1.6之后不需寫這個);在jquery中,自動幫你傳了,所以不用這一步。
      • $log 打印調試信息($log.log()、$log.error()、$log.warn()、$log.debug()、$log.info())

      • $filter 在控制器中格式化數據

      • $Timeout 和 $interval

  • 自定義服務

九、模塊加載

  • 配置塊
    • 通過config來實現對服務的配置(也可以更改一些服務的默認設置),AngularJS絕大多數服務都有對應的provider。例如:$route 對應的$routeProvider(配置路由)
  • 運行塊
    • 特殊:run方法 還是最先執行的。 案例:比如驗證用戶是否登錄,未登錄則不允許進行任何其它操作。

十、路由

  • 功能:一個應用由若干個個視圖組成,然后呢,根據不同的業務邏輯展示不同的視圖給用戶。

  • 理解

    • SPA:Single Page Application 單頁面應用
    • 鏈接使用錨點
    • 單一頁面原理:單頁面通過hashchange事件監聽錨點的變化,實現不同錨點准備找到對應的視圖
  • 路由: AngularJS基於單一頁面原理進行封裝,將錨點變化封裝成路由,這也是與后端路由的根本區別

  • 路由的使用:

    • 需引入angular-route.js文件

    • 實例化模塊,傳入依賴(路由名稱為:ngRoute)

    • 配置路由(config、$routeProvider、when(條件))

    • 布局模板(用ng-view指令,路由匹配的視圖會渲染到該區域)

  • 路由的參數:

    • 兩種方法匹配路由:when和otherwise,when可以調用多次。otherwise作為when的補充,參數只有一個。
    • when有兩個參數
      • 參數1:是個字符串,代表當前url的hash值;例如:“/:type”
      • 參數2:是一個對象,配置當前路由參數,如視圖、控制器
        • template:字符串形式視圖模板
        • templateUrl:引入外部視圖模板
        • controller:視圖模板所屬控制器,作用之一:通過http請求向后台要數據
        • redirectTo:跳轉到其他路由 例如:“/2”;
    • 獲取路由參數,在控制器中注入$routeParams,可以傳遞參數給后台或其他。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM