jQueryMobile與AngularJS的區別

 

(1)jQuery是一個JS函數庫,簡化DOM操做。html

(2)jQueryUI是一個HTML UI組件庫,適用於PC應用。面試

(3)TwitterBootstrap是一個CSS框架,提供了基礎樣式+HTMLUI組件庫,簡化響應式網頁的開發。框架

(4)GoogleAngularJS是一個JS框架,簡化了數據在頁面的操做。異步

(5)jQueryMobile是一個HTML UI組件庫,適用於移動應用。ide

 

jQuery+jQueryUI => 基於DOM操做的PC應用函數

jQuery+Bootstrap => 基於DOM操做的響應式應用動畫

jQuery+Angular => Xspa

jQuery+jQM => 基於DOM操做的移動應用雙向綁定

jQueryUI+Bootstrap => Xhtm

jQueryUI+Angular => 基於數據操做的PC應用

jQueryUI+jQM => X

Bootstrap+Angular => 基於數據操做的響應式應用

Bootstrap+jQM => X

Angular+jQM => 基於數據操做的移動應用

 

 

 

2.複習:AngularJS中的MVC模型

  (1)每一個Controller實例都須要使用ngController指令來建立,建立它的元素就是這個控制器對象的做用範圍——對應一個$scope

  (2)若想在全部的控制器中共享數據,能夠聲明爲$rootScope範圍內的Model數據

 

  (3)若只想在有限的幾個控制器中共享數據,能夠將這幾個控制器聲明在同一個父控制器內部

 

  「提取父控制器」的意義:在父控制器中聲明多個子控制器中共享的、重複的Model數據和Model函數。

 

 

3.補充:觸屏設備中的事件

  jQueryMobile擴展了標準的事件:

orientationchange: 瀏覽設備的方向改變

pagebeforeload: jQM使用AJAX異步加載一個Page以前

pageload: jQM使用AJAX異步加載一個Page

pagebeforecreate: jQM Page建立以前——掛到DOM樹以前

pagecreate:jQM Page被建立——掛到DOM樹

pageinit:jQM Page開始初始化——掛到DOM樹後開始初始化

pagechange: jQM 當前Page發生改變,且切換動畫完成以後

swipe:手指在屏幕上滑動

swipeleft:手指在屏幕向左滑動

swiperight: 手指在屏幕向右滑動

tap: 手指在屏幕上輕擊一下

taphold:手指在屏幕上敲擊並保持一小段時間

提示:上述事件監聽函數的綁定不能直接寫在HTML中,只能使用jQuery提供的事件綁定函數來實現:

$(...).on('swipeleft', fn);

面試題:jQM中提供的幾個page相關事件觸發順序:

   pagebeforeload -> pageload -> pagebeforecreate -> pagecreate ->pageinit -> pagechange

 

 

  AngularJS基於jQM擴展了標準的事件:

注意:自定義的模塊要聲明依賴ngTouch模塊,就能夠使用觸屏相關指令:

(1)ngClick

(2)ngSwipeLeft

(3)ngSwipeRight

 

 

4.整合jQM和AngularJS

  整合目標:使用jQM簡化界面UI的編寫(處理界面) + AngularJS實現數據的雙向綁定(處理數據)。

  (1)選擇頁面切換方案:

若ngRoute作路由頁面切換,會產生不少問題;

$routeProvider.

when('/main' ,{

templateUrl: 'tpl/main.html',

controller: 'mainCtrl'

})

推薦使用jQM中的頁面切換及過場動畫:

<a href="x.html" data-transition="動畫">

$.mobile.changePage('x.html', {transition:'動畫'});

  (2)每一個Page都對應一個專有的Controller對象

<div data-role="page" ng-controller="xxCtrl">

  (3)使用jQM的頁面跳轉(超連接/JS),加載指定的Page(聲明瞭ngController),默認是不會被Angular實例化出Controller對象——由於Angular本身認爲以前已經檢索過整個DOM樹,已經處理完全部的ngController指令,後添加的Page所聲明的ngController不會爲Angular所理睬!——必須設法通知到Angular當前DOM樹了加載了新的聲明ngController指令的元素!—— 讓AngularJS從新編譯加載的DOM元素。

具體實現過程:

1)使用jQM提供的頁面事件監聽機制,監聽pageinit事件(說明新的Page已經掛載到DOM樹,開始初始化處理)

$('body').on('pageinit', function (event) {

    //console.log('新的Page被掛載到DOM樹啦...');

    //console.log(event);

    //event.target就是剛被掛載進來的DOM片斷

    //啓用Angular的編譯機制,編譯一遍這個DOM片斷

    var newPageScope = $(event.target).scope(); //獲取新的代碼片斷對應的做用域對象

    $(event.target).injector().   /*獲取Angular注入器*/

    invoke(function ($compile) {

      $compile($(event.target))(newPageScope); //從新編譯DOM片斷,並連接入其所須要的模型數據

      newPageScope.$digest();  //啓動$digest隊列的輪詢

    });

 

  })

 

AngularJS的啓動過程分析——瞭解

(1)啓動以前——頁面引入angular.js,此文件提供了一些angular.xx()函數

(2)啓動框架——尋找靜態DOM樹上的ngApp指令,開始引導Angular框架的啓動

(3)建立注入器($injector)——負責建立並注入全部組件所依賴的那些對象

   $(document).data('$injector',   angular.injector([...])  )

(4)建立$rootScope對象

(5)編譯($compile)DOM子樹——根據指令轉換DOM節點、分配事件監聽函數、進行數據綁定的監聽

相關文章
相關標籤/搜索