亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

AngulerJS學習之按需動態(tài)加載文件

 更新時間:2017年02月13日 10:15:01   作者:左手121  
本篇文章主要介紹了AngulerJS學習之按需動態(tài)加載文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在此之前我們首先要先了解幾個東西:

$q

簡介:

$q:主要解決的是異步編程的問題,是指描述通過一個承諾行為與對象代表的異步執(zhí)行的行動結果的交互,可能會也可能不會再任何時候完成。

我們通過一個小故事理解 $q 服務。

  • 中午點外買,打電話要了份炒飯,要求送到公司并給了老板具體地址。這個過程就是 $q.defer;
  • 飯菜不可能立即送到,因此這是一個延期響應的請求;
  • 老板說盡快送到。也就是老板給了我一個承諾 promise;
  • 我可以邊工作邊等待,說明這個請求是個異步執(zhí)行的過程。
  • 這樣這個延期異步請求就算建立完成了。就是一個deferred。
  • 飯菜送到我去接受,這個過程稱為 deferred.resolve(data) 響應事件;
  • 如果米飯賣完了老板會告訴我做不了了,也就是拒絕我的請求了,就是 deferred.reject(error);
  • 老板可以再任何時候跟我說做不了,只要在他還沒把飯送來之前都可以。
  • 快到樓下了,通知我去取。這就是通知 deferred.notify(data) 這樣整個異步回調過程就完成了。
  • 第二天我們好多人都要訂餐。所以我就可以發(fā)起 $q.all(req1,req2,req3.);

使用

我們在服務中這樣定義,在請求開始之間建立deferred,然后return deferred.promise.在獲取到數(shù)據(jù)的時候deferred.resolve(data)。同樣我們在中間可以收到通知或者拒絕等。

var def = $q.defer();
def.resolve(data);
return def.promise;

按需加載

首先我們要了解一下幾點:

1、什么時機下加載:

在 ngRoute 和 uiRoute 中都提供了 resolve 屬性里的值會在路由成功前被預先設定好,然后注入到控制器中。通俗地將,就是等數(shù)據(jù)都“就位”后,才進行路由(其實我覺得也不能叫路由,因為路由是一些列的操作,其中就包括了設置 resolve 屬性等等)。可以參考我的上篇文章。

2、加載后的文件如何注冊:

angular有個啟動函數(shù),叫做bootstrap。 根據(jù)angular的代碼設計,你需要在啟動之前定義所有的controller。就好似有個袋子,你在bootstrap之前想往里塞什么就塞什么。可是一旦bootstrap了,他就不再接受你任何往里塞的controller了。

解決這個問題,只有一個方法,就是利用主模塊的provider主動注冊controller。但是由于provider不能直接使用,所以我們把它存在主模塊下面。通過存下來的方法,可以用來注冊異步加載回來的頁面組件。

通過上述我們知道了需要異步加載文件

實現(xiàn)

// controller
define(["app"], function(app) {
  app.config(["$stateProvider", "$urlRouterProvider", "$controllerProvider",
    function($stateProvider, $urlRouterProvider, $controllerProvider) {
      // angular有個啟動函數(shù),叫做bootstrap;
      // 根據(jù)angular的代碼設計,你需要在啟動之前定義所有的controller;
      // 就好似有個袋子,你在bootstrap之前想往里塞什么就塞什么;
      // 可是一旦bootstrap了,他就不再接受你任何往里塞的controller了;
      // 解決這個問題,只有一個方法,就是利用主模塊的provider主動注冊controller;
      // 但是由于provider不能直接使用,所以我們把它存在主模塊下面;
      // 通過存下來的方法,可以用來注冊異步加載回來的頁面組件。
      app.registerController = $controllerProvider.register;
      app.loadFile = function(js) {
        return function($rootScope, $q) {
          //通過$q服務注冊一個延遲對象 deferred
          var def = $q.defer(),
            deps = [];
          angular.isArray(js) ? (deps = js) : deps.push(js);
          require(deps, function() {
            $rootScope.$apply(function() {
              // 成功
              def.resolve();
              // def.reject() 不成功
              // def.notify() 更新狀態(tài)
            });
          });
          //通過deferred延遲對象,可以得到一個承諾promise,而promise會返回當前任務的完成結果
          return def.promise;
        };
      }
      $urlRouterProvider.otherwise('/index');
      $stateProvider.state("index", {
        url: "/index",
        template: "這是首頁頁面"
      });
      $stateProvider.state("computers", {
        url: "/computers",
        template: "這是電腦分類頁面{{title}}",
        controller: "ctrl.file",
        resolve: {
          loadFile: app.loadFile("file")
        }
      });
      $stateProvider.state("printers", {
        url: "/printers",
        template: "這是打印機頁面"
      });
      $stateProvider.state("blabla", {
        url: "/blabla",
        template: "其他"
      });
    }
  ]);
});

// file.js
define(["app"], function(app) {
  app.registerController("ctrl.file", function($scope) {
    $scope.title = "--測試 ";
  });
});

源碼:requireLearn_jb51.rar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JavaScript框架Angular和React深度對比

    JavaScript框架Angular和React深度對比

    這篇文章主要介紹了JS框架中Angular和React不同和差異,以及兩個框架的深度對比介紹。
    2017-11-11
  • AngularJS的內置過濾器詳解

    AngularJS的內置過濾器詳解

    在我們開發(fā)中經常需要在頁面顯示給用戶的信息需要一定處理格式化,才能顯示給用戶。在angularjs中為我們提供了叫filter的指令,讓我們能夠很輕易就能做到著一些列的功能,angularjs內部為我們提供了number等很多內置的filter。
    2015-05-05
  • AngularJS 執(zhí)行流程詳細介紹

    AngularJS 執(zhí)行流程詳細介紹

    本文詳細介紹了從頁面開始加載到頁面渲染完畢過程中,AngularJS執(zhí)行了哪些操作,有需要的小伙伴可以參考下
    2016-08-08
  • Angular獲取ngIf渲染的Dom元素示例

    Angular獲取ngIf渲染的Dom元素示例

    這篇文章主要為大家介紹了Angular獲取ngIf渲染的Dom元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • AngularJS  $on、$emit和$broadcast的使用

    AngularJS $on、$emit和$broadcast的使用

    本文主要介紹AngularJS $on、$emit和$broadcast的使用,這里整理了詳細的資料及簡單示例代碼有興趣的小伙伴可以參考下
    2016-09-09
  • angularJs復選框checkbox選中進行ng-show顯示隱藏的方法

    angularJs復選框checkbox選中進行ng-show顯示隱藏的方法

    今天小編就為大家分享一篇angularJs復選框checkbox選中進行ng-show顯示隱藏的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 基于angular實現(xiàn)三級聯(lián)動的生日插件

    基于angular實現(xiàn)三級聯(lián)動的生日插件

    這篇文章主要為大家詳細介紹了基于angular實現(xiàn)三級聯(lián)動的生日插件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • AngularJS自定義表單驗證功能實例詳解

    AngularJS自定義表單驗證功能實例詳解

    這篇文章主要介紹了AngularJS自定義表單驗證功能,結合完整實例形式詳細分析了AngularJS實現(xiàn)表單驗證的相關指令、模型綁定、數(shù)據(jù)驗證等操作技巧,需要的朋友可以參考下
    2018-08-08
  • AngularJS實現(xiàn)單一頁面內設置跳轉路由的方法

    AngularJS實現(xiàn)單一頁面內設置跳轉路由的方法

    這篇文章主要介紹了AngularJS實現(xiàn)單一頁面內設置跳轉路由的方法,結合實例形式分析了AngularJS路由操作相關設置與使用技巧,需要的朋友可以參考下
    2017-06-06
  • angularjs $http調用接口的方式詳解

    angularjs $http調用接口的方式詳解

    今天小編就為大家分享一篇angularjs $http調用接口的方式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論