1.Angular架構-angular介紹與基本使用,MVC模式介紹

來源:互聯網
上載者:User

標籤:好的   沒有   渲染   tin   ack   雙向   name   傳遞資料   1.2   

1.1. AngularJS概述

1.1.1. 介紹
  • 簡稱:ng
  • Angular是一個MVC架構
AngularJS 誕生於2009年,由 Misko Hevery 等人建立,後為Google所收購。是一款優秀的前端JS架構,已經被用於Google的多款產品當中。AngularJS有著諸多特性,最為核心的是:MVC、模組化(編程)、自動化雙向資料繫結、語義化標籤、指令、依賴注入等等。
  • 其他前端架構: VueJS 、 Avalon 、 React 、 BackBone 、 KnockoutJS
1.1.2. Angular的核心特性
  • 指令MVC模組化雙向資料繫結
1.1.3. 原則
  • 不推崇開發人員手動操作DOM, 其底層還是操作DOM
  • 解放雙手,簡化了HTML的操作(從DOM中解放出來)
1.1.4. 優勢
  • Angular 最大程度的減少了頁面上的 DOM 操作
  • 讓 JavaScript 開發專註商務邏輯
  • 代碼結構更合理
  • 維護成本更低
  • 通過簡單的指令把頁面結構和資料結合
  • 通過自訂指令實現組件化編程
1.1.5. 使用情境
  • AngularJS主要考慮的是構建 CRUD 應用,一般是:單頁面的應用程式。
1.2. SPA -單頁應用程式
  • SPA: Single Page Application
  • 介紹:
單頁Web應用(single page application,SPA),就是只有一個Web頁面的應用,是載入單個HTML頁面,並在使用者與應用程式互動時動態更新該頁面的Web應用程式。
  • 單頁面應用程式:

  • 傳統多頁面應用程式:

1.2.1. 優勢
  • 1 無重新整理載入頁面,避免了不必要的跳轉和重複渲染
  • 2 更好的使用者體驗,讓使用者在web app感受native app的速度和流暢
  • 3 減少了請求體積,節省流量,加快頁面響應速度
  • 4 可以選擇性的保留狀態,如音樂網站,切換頁面時不會停止播放歌曲

  • 傳統ajax的劣勢:

1 ajax請求不會留下記錄2 使用者無法直接通過URL直接進入指定頁面3 ajax對SEO不友好
1.2.2. 劣勢
  • 不利於SEO,但是有其他解決方案
1.2.3. 主要技術點
  • 1 ajax
  • 2 錨點的使用(window.location.hash #)
  • 3 hashchange 事件
1.2.4. 實現思路
  • 監聽錨點值變化的事件,根據不同的錨點值,請求相應的資料
  • 1 錨點(#)原本用作頁面內部進行跳轉,定位並展示相應的內容
  • 2 NG中,錨點被用作請求不同資源的標識,請求資料並展示內容
1.2.5. 執行個體和參考
  • SPA - 百度百科
  • 一種SPA(單頁面應用)架構
  • 網易雲音樂
1.3. AngularJS的基本使用
  • AngularJS 是自動執行的,只需要我們告訴它要做什麼,在哪個位置去做
1.3.1. 案例
  • 1 Hello World案例
  • 2 文字框的值加1案例
1.3.2. 使用步驟
  • 1 引入 NG 的js檔案
  • 2 設定 ng-app 指令
  • 3 給文字框添加 ng-model 指令
  • 4 給按鈕添加 ng-click 指令
1.4. directive -指令
  • AngularJS 有一套完整的、可擴充的、用來協助 Web 應用程式開發的指令集
  • 指令是DOM元素上的一些標記,讓NG給DOM元素添加一些特殊的行為
  • 指令包含:內建指令 和 自訂指令
1.4.1. 指令是什麼
  • 將首碼為 ng- 的屬性稱之為指令,其作用是為DOM元素繫結資料、添加事件 等
<input type="text" ng-model="userName">
  • 指令的值是一個:運算式
1.4.2. 指令的類型
  • 屬性(A)、元素(E)、類(C)、注釋(M)
1.4.3. 常用指令1.4.3.1. ng-app
  • 作用:該指令用來啟動一個AngularJS應用
  • 理解:指定AngularJS應用程式管理的邊界,只有在ng-app內部的指令才會起作用
  • 解釋:
ng-app 指令指定了應用的根項目,通常放置在頁面的根項目,也可以是任意的元素例如:body或html標籤應用程式運行時,會自動執行邊界內部的其他指令。標記的範圍儘可能小,提高效能注意:每個頁面中可以出現多次 `ng-app` 指令(不推薦!)如果是多個需要手動引導:`angular.bootstrap()`
1.4.3.2. ng-click
  • 作用:用來指定DOM元素被點擊時執行的事件
  • 文法:ng-click="expression"
<button ng-click="val + 1"></button>
1.4.3.3. ng-model
  • 作用:綁定資料,在 input/select/textarea 標籤中使用
  • 說明:
ng-model指令將嘗試把屬性綁定到當前範圍中。如果當前範圍中沒有該屬性,那麼AngluarJS會幫我們隱式建立並且添加到當前範圍中。
1.4.3.4. ng-init (瞭解)
  • 作用:初始化屬性的值
  • 文法:ng-init="uName=‘Jack‘"
1.5. expression -運算式
  • 介紹:是一些JavaScript的程式碼片段主要被用在插值綁定或者直接作為指令的屬性值
從JS角度,使用運算子和資料 串連起來的有 結果 的代碼就是:運算式注意:不帶分號例如:可以使用 console.log(); 列印出來, 或者    console.log( expression );可以用作 賦值運算子 的右值    var test = expression;
<p>{{user.name}}</p><p>{{1 + 8}}</p><p>{{"hello" + "world"}}</p><div ng-click="sayHi()"></div>
1.6. AngularJS的執行過程分析
  • 範例程式碼:
<body ng-app>    <input type="text" ng-model="user.name" />    <p>Hello {{user.name}}</p></body>
1.6.1. 執行過程說明
  • ng-app告訴AngularJS讓它來管理 body內部的代碼
  • ng-app指令建立了一個對象,對象中包含了AngularJS的相關內容,例如:資料模型
  • ng-model指令查詢資料模型中有沒有 user 對象以及name屬性,沒有則建立
  • 4 建立user對象以及name屬性,並初始化name值為:Null 字元串
  • 5 運算式 {{user.name}} 從資料模型中尋找有沒有該資料,如果有就取出來,並展示
  • ng-model{{}} 中的 user.name 指向的是資料模型中同一個資料
  • 7 文字框值的變化會導致資料模型的變化,資料模型的變化也會導致運算式的變化

1.6.2. 案例強化
  • 加法計算機案例
1.7. 查看AngularJS的文檔
  • 目標:學會查看官方文檔資料
1.7.1. 離線文檔和線上文檔
  • AngularJS官方文檔
  • ng中文文檔 - 1
  • ng中文文檔 - 2
1.8. module -模組
  • 所有的其他內容,都是基於模組的,有模組才有其他的內容!
模組是一個容器包含了應用程式的不同組成部分,並且這些內容必須要依附於一個模組    例如:controllers, services, filters, directives, configs 等模組是應用程式的組成單元,例如:登入模組、註冊模組、商品列表模組 等,這些模組組合在一起構成了一個完整的應用程式。
1.8.1. 建立模組
  • 文法:var app = angular.module(moduleName, []);
  • 作用:建立一個模組,讓AngluarJS對整個內容進行模組化管理
  • 說明:模組也可以被建立多次,但很少這麼做
  • 樣本:
// 第一個參數:模組名稱,字串// 第二個參數:數組,用來添加當前模組的依賴項var app = angular.module("firstApp", ["otherModuleName"]);
1.8.2. 擷取模組
  • 文法:var app = angular.module(moduleName);
  • 作用:擷取指定的模組
1.9. controller -控制器
  • 需要配合ng-controller指令來使用
1.9.1. 建立控制器
  • 文法:app.controller(ctrlName, callback);
  • 作用:建立一個控制器,控制器必須出現在某個模組下
  • 樣本:
app.controller("DemoController", function($scope) {    // $scope 相當於當前的資料模型});
1.9.2. 控制器的作用
  • 1 初始視圖中使用的資料,是儲存資料的容器
  • 2 通過$scope對象把資料模型或函數行為暴露給視圖
  • 3 監視模型的變化,做出相應的邏輯處理
1.9.3. $scope的說明
  • 1 $scope是控制器和視圖之間的橋樑,用於在控制器和視圖之間傳遞資料
  • 2 推薦:給 $scope 添加資料應該使用對象,而不是作為其屬性
  • 2 在控制器中暴露 資料模型(資料和行為),在視圖中通過指令或運算式來使用
    • 對比:局部變數
  • 4 注意:$scope這個名稱必須這麼寫!
  • $scope 是在控制器建立的時候,被注入進去的
1 ng 在使用的時候,頁面中只要有 ng-app 就會建立一個 scope,名字是:$rootScope2 $scope 是 HTML(視圖)背後的“男人” ---->    視圖:女人,負責美(展示)    $scope:男人,負責提供美的資源(資料)3 所有的控制器都繼承自 $rootScope 4 繼承是按照:原型式繼承 來實現5 對於HTML來說,參照原型式繼承:子節點繼承自父節點
1.10. 資料繫結方式1.10.1. 雙向資料繫結
  • 一般通過 ng-model 指令實現
  • 概述:
資料模型的值發生改變,就會導致頁面值的改變;頁面值的改變,也會導致資料模型中值的改變,這種相互影響的關係就是雙向資料繫結。
1.10.2. 單向資料繫結
  • 一般通過 {{}} 運算式來實現
  • 概述:資料模型的值發生改變,導致頁面的值發生改變
1.11. MVC 與 MVVM
  • 優勢:代碼分離(視圖代碼、控制器代碼),職責分離,解耦
  • 目的:解決應用程式展示結構、商務邏輯之間的緊耦合關係,實現模組化和複用
  • 提高了代碼的結構和可維護性,但是不會提高代碼執行的效率
1.11.1. MVC介紹
MVC(Model–view–controller)是一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。MVC是一種應用程式的設計思想(不是設計模式)
  • Model 進行資料的儲存和資料的處理方法(CRUD)
  • View 展示資料
    • 在Angluar中,View指的是在頁面中被 ng-app 指令包裹的HTML代碼
  • Controller 是應用程式中處理使用者互動的部分
    • 通常控制器負責從視圖讀取資料,控制使用者輸入,並向模型發送資料,是資料和視圖的橋樑
例如:移動端和PC端兩個View,共用同一個Model在MVC設計模式中, Model 響應使用者請求並返迴響應資料,View 負責格式化資料並把它們呈現給使用者,商務邏輯和展示層分離,同一個 Model 可以被不同的 View 重用,所以大大提高了代碼的可重用性。
1.11.2. MVVM
  • 是由 MVC 模式演變出來的!
  • 組成:
M: model 模型,相當於 User(建構函式)V: view 視圖, ng-app 管理的頁面VM: ViewModel 視圖模型 在Angular中就是:$scope
1.11.2.1. ViewModel
  • 1 $scope實際就是MVVM模式中的VM(視圖模型)
  • 2 Angular中大量的使用$scope, 蓋過了C(控制器)的概念,所以很多人將其稱為MVVM架構
  • 3 不要深究到底是什麼類型(MVC/MVVM),重要的是學會使用。
  • MVW ===> "Model View Whatever"
  • 5 MVVM 首先出現在 微軟的WPF 中
1.11.3. 案例:使用者註冊1.11.3.1. localStorage 的基本使用
  • getItem(keyName):讀取,參數類型:string
  • setItem(keyName, keyValue):設定,參數類型:string
1.11.3.2. 參考
  • localStorage - MDN
  • localStorage的基本使用
1.12. $watch -監聽資料
  • 文法:$scope.$watch(attrName, callback, flag);
  • 作用:監聽$scope中資料模型的變化,無法監視其他的資料(例如,普通變數)
  • 注意:調用$watch方法時,會立即被調用一次。
app.controller("demoController", function($scope) {    $scope.name = "jack";    // 參數一:表示監聽的$scope中的屬性名稱,類型為:字串    // 參數二:表示資料變化執行的回呼函數,有兩個參數分別是:當前值與變化之前的值    // 參數三:比較方式,false:表示比較引用;true:表示比較值。預設值為false    $scope.$watch("name", function(curValue, oldValue) {        // 只要被監聽的資料發生變化,就會指定該回呼函數中的代碼!        // 略過第一次執行        if(curValue === oldValue) return;    });});
1.13. 啟動NG的方式
  • 1 通過 ng-app 指令啟動
  • 2 手動啟動:angular.bootstrap(document, [‘MyModule‘])
// 等待文檔載入完成後,啟動 angularangular.element(document).ready(function() {    angular.bootstrap(document, [‘MyModule‘]);});
1.14. 其他1.14.1. 多個app
  • 注意:不推薦在同一個頁面中建立多個 ng-app
  • 注意:ng只會找到第一個 ng-app 並且啟動,如果啟動其他的,需要手動啟動
<div ng-app="FirstApp"></div><div ng-app="SecondApp"></div>
1.15. 架構和庫的區別1.15.1. Library
  • jQuery is a library, Angular is a framework
  • jQuery是API的集合,封裝DOM操作,提高開發效率
使用jQuery的思路:1 想要擷取元素,我調用 $(selector)2 元素繫結事件,我調用 .on()3 進行什麼DOM操作,我調用什麼方法完成總結:你告訴jQuery你要做的操作,jQuery就能幫你做好。      **在使用庫的過程中,開發人員是 控制者**
1.15.2. Framework
  • 架構規定了一種編程方式
  • 使用架構的時候,由架構控制一切,我們只需要按照規則寫代碼
Angular提供了一套完整的解決方案,所有的流程都設定好了我們只需要按照流程規則,把我們的代碼進行填坑。
1.15.3. 主要區別是:
  • 控制反轉,架構中控制整個流程的是架構
  • You call Library, Framework calls you.
  • 好萊塢原則:Don‘t call us, we‘ll call you.
1.16. 其他資料1.16.1. angular代碼風格
  • johnpapa/angular-styleguide
1.16.2. 模組化
  • 樂高
  • 樂高-機器人
1.16.3. 參考網站
  • 百度CDN
  • 開源中國線上工具

1.Angular架構-angular介紹與基本使用,MVC模式介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.