欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

AngularJS模板加載用法詳解

 更新時間:2016年11月04日 08:55:58   作者:@bornkiller  
這篇文章主要介紹了AngularJS模板加載用法,結(jié)合實例形式詳細分析了AngularJS模板加載所涉及的屬性、方法、使用技巧與相關注意事項,需要的朋友可以參考下

本文實例講述了AngularJS模板加載用法。分享給大家供大家參考,具體如下:

angular模板加載 ----ng-template

AngularJS作為mvc(或者說mvvm)框架,同樣具備模板這一基本概念。

NG加載模板的順序為 內(nèi)存加載---AJAX加載。

內(nèi)存加載

如果之前使用過Bootstrap 插件的ng版,即angular-ui,就會了解到這種方式的具體應用。模板本質(zhì)上是字符串,把字符串直接寫入內(nèi)存,加載時直接從內(nèi)存獲取,速度會更快,有兩種方式顯式啟用內(nèi)存加載。

通過使用 $templateCache service來實現(xiàn)

angular.module('myApp', [])
 .controller('myCtrl', ['$scope','$templateCache', function($scope,$templateCache){
    var tmp = '<h4>lovestory</h4>'
       + '<p>這是直接調(diào)用$templateCache服務獲取模板文件的方式</p>'
       + '<a ;
    $templateCache.put('lovestory.html',tmp);
  }])

$templateCache 服務put方法負責向內(nèi)存寫入模板內(nèi)容。

通過 script 標簽引入

<script type="text/ng-template" id="lovestory.html">
  <h4>lovestory</h4>
  <p>這是script標簽獲取模板文件的方式</p>
  <a >標簽啟用templateCache方式</a>
</script>

這里需要注意, type="text/ng-template" 是指明這是ng模板,id屬性是指實際使用模板時的一個引用,標簽之間的內(nèi)容才是實際的模板內(nèi)容。而且,需要注意,id絕對不是URL,這個 script 標簽絕對不會發(fā)出HTTP請求,具體討論見最后。

實際應用模板時候,使用 ID 屬性,即可從內(nèi)存中獲取對應數(shù)據(jù)。

<div ng-include="'lovestory.html'" class="well"></div>

使用 ng-include 的時候,應該注意,id相當于一個字符串,不是ng-expression ,所以不要忘了加單引號。

AJAX加載

上述的內(nèi)存加載,相當于一個預定義模板,定義在 client-side ,不會與服務器有任何交互,適合變化頻率低的模板。

當NG在內(nèi)存中找不到對應模板時,就會啟用AJAX請求,去拉取對應模板。假設項目入口文件地址為 http://127.0.0.1/index.html ;

<div ng-include="'lovestory.html'" class="well"></div>

在指令中同樣可以使用,templateUrl對應值

angular.module('myApp', [])
 .directive('templateDemo', ['$log', function($log){
  return {
  restrict: 'A', // E = Element, A = Attribute, C = Class, M = Comment
  templateUrl: 'butterfly.html',
  replace: true,
  link: function($scope, iElm, iAttrs, controller) {}
  }
 }])

內(nèi)存中沒有對應模板時,AJAX請求地址為 http://127.0.0.1/lovestory.html , 請求成功后將對應內(nèi)容寫入 $templateCache ,在頁面不進行刷新,不手動刪除的情況下,寫入的內(nèi)容不會丟失。而且,務必記住,AJAX是有緩存控制的。。。

內(nèi)存模板優(yōu)點

在雅虎前端優(yōu)化34條里,有一條是“合并壓縮文件”。

合并壓縮文件可以減小HTTP請求量,又可以減小網(wǎng)絡傳輸量,對于路徑依賴并不嚴重的JS,CSS文件完全是必備,因為各JS,CSS文件開發(fā)時分割為不同的文件,實現(xiàn)各自的功能需求,上線時合并即可,但是,HTML文件可以壓縮,但是無法合并,因為路徑依賴嚴重。

以我為學習Angularjs而做的個人博客練習 路由為例:

angular.module('administratorApp',[])
 .config(function ($routeProvider,$locationProvider) {
  $locationProvider.html5Mode(false);
  $routeProvider
   .when('/manage', {
    templateUrl: 'views/manage.html',
    controller: 'ManageCtrl'
   })
   .when('/diary/:key', {
    templateUrl: 'views/diaryDetail.html',
    controller: 'DiaryDetailCtrl',
   })
   .when('/diary', {
    templateUrl: 'views/diaryList.html',
    controller: 'DiaryListCtrl'
   })
   .when('/publish/:key', {
    templateUrl: 'views/update.html',
    controller: 'UpdateCtrl'
   })
   .when('/publish', {
    templateUrl: 'views/publish.html',
    controller: 'PublishCtrl'
   })
   .when('/record', {
    templateUrl: 'views/record.html',
    controller: 'RecordCtrl'
   })
   .otherwise({
    redirectTo: '/diary'
   });
 });

六個控制器需要六個模板,六次HTTP請求加載數(shù)據(jù)量并不大的模板資源浪費嚴重。NG的優(yōu)化方案是,通過虛擬路徑取代實體路徑,去除掉 server-side 的路徑依賴。

好處就是,一個JS文件一次HTTP請求,而不是六次。壞處就是內(nèi)存壓力變大,PC上無所謂,開發(fā)web app(mobile)就需要注意幾點。

① 移動端內(nèi)存太脆,盡量不要使用上述所說的預定義模板,因為模板會全部加載到內(nèi)存中

② AJAX請求完畢,會自動把結(jié)果放入cache里,所以需要手動控制.模板與控制器存在對應關系,可以在控制器內(nèi)部加上如下代碼

$scope.$on('$locationChangeStart',function(){
   $templateCache.remove('****.html');
})

③ $routeProvider的 template , templateUrl 可以是函數(shù),通過函數(shù)返回值可以控制模板加載。

PS::本人并未涉及到移動端開發(fā),所以此處為思考所得,而且隨著手機硬件性能提升,內(nèi)存不再是個困擾。

$templateCache 方法

$templateCache 基于 cacheFactory 而來,接口保持一致,可以認為

\$templateCache = \$cacheFactory('template');

方法 功能
put 向內(nèi)存寫入模板內(nèi)容
get 從內(nèi)存獲取模板內(nèi)容
remove 傳入key值,刪除對應模板內(nèi)容
removeAll 刪除所有模板內(nèi)容
destroy 解除key-value對應關系,但不釋放內(nèi)存
info 模板緩存對象的信息

Grunt與ID屬性誤解

module.exports = function(grunt){
 grunt.initConfig({
  html2js : {
   simple : {
    options : {
     base : '',
     module : 'templateStore'
    },
    files : [{
     src : ['views/*.html'],
     dest : 'build/scripts/templateStore.js'
    }]
   }
  }
 });
 grunt.loadNpmTasks('grunt-html2js');
 grunt.registerTask('default',['html2js']);
}

這是我目前使用Grunt--html2js的配置方案,目的是將 views 文件夾下的所有模板文件全部放入 templateStore 模塊中,各模板對應ID即為路徑,生成的部分代碼如下:

angular.module("views/diaryList.html", []).run(["$templateCache", function($templateCache) {
 $templateCache.put("views/diaryList.html", '*******'
}]);

這部分代碼等效于

<script type="text/ng-template" id="views/diaryList.html">
   ***********
</script>

現(xiàn)在應該明白,id只是個標示,不是URL。。。。。。

AJAX緩存

涉及到部分HTTP Header 和 XHR2 的相關內(nèi)容,將作為單獨篇章后續(xù)介紹。

希望本文所述對大家AngularJS程序設計有所幫助。

相關文章

  • 詳解Angular 開發(fā)環(huán)境搭建

    詳解Angular 開發(fā)環(huán)境搭建

    Angular 是一款開源 JavaScript 框架,使開發(fā)和測試變得更加容易,這篇文章主要介紹了詳解Angular 開發(fā)環(huán)境搭建,需要的朋友可以參考下
    2017-06-06
  • AngularJS實現(xiàn)與Java Web服務器交互操作示例【附demo源碼下載】

    AngularJS實現(xiàn)與Java Web服務器交互操作示例【附demo源碼下載】

    這篇文章主要介紹了AngularJS實現(xiàn)與Java Web服務器交互操作的方法,結(jié)合實例形式較為詳細的分析了AngularJS前臺ajax提交與javascript后臺處理的完整流程與實現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2016-11-11
  • Angular2平滑升級到Angular4的步驟詳解

    Angular2平滑升級到Angular4的步驟詳解

    最近Angular項目組終于發(fā)布了新版——正式版 Angular 4.0.0。所以想著就來嘗試下升級,記錄下整個升級過程分享給大家,所以這篇文章主要介紹了Angular2升級到Angular4的詳細步驟,需要的朋友可以參考下。
    2017-03-03
  • Angular.js實現(xiàn)獲取驗證碼倒計時60秒按鈕的簡單方法

    Angular.js實現(xiàn)獲取驗證碼倒計時60秒按鈕的簡單方法

    最近做項目的時候又遇到了驗證碼倒計時的需求,發(fā)現(xiàn)這個功能還是挺實用的,所以就想著總結(jié)一下,下面這篇文章主要給大家介紹了關于利用Angular.js如何實現(xiàn)獲取驗證碼倒計時按鈕的簡單方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • AngularJS實現(xiàn)的鼠標拖動畫矩形框示例【可兼容IE8】

    AngularJS實現(xiàn)的鼠標拖動畫矩形框示例【可兼容IE8】

    這篇文章主要介紹了AngularJS實現(xiàn)的鼠標拖動畫矩形框,涉及基于AngularJS的事件響應及頁面元素屬性動態(tài)操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-05-05
  • AngularJS自定義控件實例詳解

    AngularJS自定義控件實例詳解

    這篇文章主要介紹了AngularJS自定義控件,結(jié)合實例形式詳細分析了AngularJS自定義指令與模板操作的相關函數(shù)與使用技巧,需要的朋友可以參考下
    2016-12-12
  • AngularJS 中括號的作用詳解

    AngularJS 中括號的作用詳解

    這篇文章主要介紹了AngularJS 中括號的作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Angular 2父子組件之間共享服務通信的實現(xiàn)

    Angular 2父子組件之間共享服務通信的實現(xiàn)

    這篇文章主要給大家介紹了關于Angular 2父子組件之間共享服務通信的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • 解決ionic和angular上拉加載的問題

    解決ionic和angular上拉加載的問題

    這篇文章主要介紹了解決ionic和angular上拉加載的問題,需要的朋友可以參考下
    2017-08-08
  • Angularjs實現(xiàn)搜索關鍵字高亮顯示效果

    Angularjs實現(xiàn)搜索關鍵字高亮顯示效果

    本篇文章主要介紹了Angularjs實現(xiàn)搜索關鍵字高亮顯示的方法,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01

最新評論