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

AngularJS 異步解決實(shí)現(xiàn)方法

 更新時(shí)間:2017年06月12日 14:43:41   投稿:lqh  
這篇文章主要介紹了AngularJS 異步解決實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下

AngularJS 異步解決實(shí)現(xiàn)方法

Angular 的異步處理的真的很不錯(cuò)。基于消息廣播的方式,并且可以向上傳遞,基本上解決了不同模塊,不同controller之間不方便異步的問題。

        場(chǎng)景一:通過回調(diào)函數(shù)進(jìn)行異步操作(該情況下不用消息廣播的機(jī)制)

        這種情況的特點(diǎn)是直接傳遞一個(gè)回調(diào)函數(shù)給異步操作就可以了,等異步操作完執(zhí)行回調(diào)。

        比如:controller通過server異步取數(shù)據(jù),等取完數(shù)據(jù)進(jìn)行一系列的操作,這個(gè)時(shí)候就可以把操作封裝到函數(shù)中,傳遞給異步操作函數(shù)。

        controller代碼片段舉例如下:

$scope.submit=function(){ 
  userService.login($scope.user.loginname.value,$scope.user.password.value,function(data){ 
    if(data.success){ 
      location.href = '../../views/main/index.html'; 
    }else{ 
      $scope.user.error.tip=data.msg; 
    } 
  }); 
}; 

         最后一個(gè)參數(shù)即為回調(diào)函數(shù)

         server代碼片段舉例如下:

return { 
    http:$http, 
  token:'', 
  auth:[], 
  loginname:'', 
  login:function(loginname,password,fn){ 
     this.http({ 
    url:'../../scripts/loginModule/services/loginOKTest.js', 
    method:'GET' 
     }) 
     .success(function(data){ 
     if(data[0].success){ 
       ... 
           //調(diào)用回調(diào)方法 
           fn(data[0]); 
     } 
      }) 
     .error(function(data,header,config,status){ 
    alert("驗(yàn)證服務(wù)請(qǐng)求失??!"); 
     }); 
  } 
} 

         場(chǎng)景二:沒有傳遞回調(diào)函數(shù)的地方,這個(gè)時(shí)候就必須用到消息廣播的機(jī)制。

         比如:我的controller通過server異步獲取數(shù)據(jù),這個(gè)時(shí)候我用回調(diào)函數(shù)保證取到數(shù)據(jù)后做后續(xù)操作。但是我的后續(xù)操作需要通過指令進(jìn)行DOM的生成。這個(gè)時(shí)候我們是沒有辦法直接調(diào)用指令的link或者compile的。這個(gè)時(shí)候我們需要用到廣播$scope.$broadcast。發(fā)送廣播以后,需要通過$scope.$on進(jìn)行監(jiān)聽。

         controller代碼片段舉例如下:

//通過categoryService異步取數(shù)據(jù) 
categoryService.initCategory(loginname,token,function(category){ 
    $scope.category=category; 
    $scope.$broadcast("categoryLoaded"); 
}); 

         service代碼片段舉例如下:


initCategory:function(loginname,token,fn){ 
  this.http({ 
  url:'../../scripts/mainModule/services/mainCategory.js', 
  method:'GET' 
  }).success(function(data,header,config,status){ 
    fn(data); 
    }).error(function(data,header,config,status){ 
    alert("驗(yàn)證服務(wù)請(qǐng)求失??!"); 
  }); 
} 

         directive代碼片段舉例如下:

 link:function ($scope, $elem, attrs) { 
   $scope.$on("categoryLoaded", function (event, args) { 
      //$scope.category即為異步獲取的數(shù)據(jù) 
   } 
} 

最后,如果我們?cè)谶@個(gè)controller中需要調(diào)用另外一個(gè)模塊的指令的link或者compile或者另一個(gè)模塊的controller怎么辦。我們需要通過依賴注入$rootScope服務(wù),因?yàn)樗撬凶饔糜虻母?,然后調(diào)用$emit這個(gè)服務(wù)進(jìn)行廣播。指令中通過$rootScope.$on進(jìn)行接收即可。

        模塊1(app.video)中的controller代碼片段舉例如下:

$scope.replay=function(id){ 
  console.log("click replay id:"+id); 
  clearReply(); 
  //通過$rootScope廣播消息給app.dialog模塊的controller 
  $rootScope.$emit("openTemplate","reply.html"); 
}; 

       模塊2(app.dialog)中的controller代碼片段舉例如下:


$rootScope.$on('openTemplate',function(event, toState, toParams, fromState, fromParams){ 
    $scope.openTemplate(toState); 
}); 
     
$scope.openTemplate = function (url) { 
    if(!url) 
      url="/ZVideo-MVC/dialog/defaultTemplate.html"; 
    $scope.value = true; 
    ngDialog.open({ 
      template: url, 
      className: 'ngdialog-theme-plain', 
      scope: $scope 
    }); 
}; 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Angular中實(shí)現(xiàn)樹形結(jié)構(gòu)視圖實(shí)例代碼

    Angular中實(shí)現(xiàn)樹形結(jié)構(gòu)視圖實(shí)例代碼

    近兩年當(dāng)中使用Angular開發(fā)過很多項(xiàng)目,其中也涉及到一些樹形結(jié)構(gòu)視圖的顯示,最近的在項(xiàng)目中封裝了大量的組件,一些組件也有樹形結(jié)構(gòu)的展示,所以寫出來總結(jié)一下。
    2017-05-05
  • AngularJS 防止頁面閃爍的方法

    AngularJS 防止頁面閃爍的方法

    我們知道在應(yīng)用的頁面或者組件需要加載數(shù)據(jù)時(shí),瀏覽器和angular渲染頁面都需要消耗一定的時(shí)間。這篇文章主要介紹了AngularJS 防止頁面閃爍的方法,需要的朋友可以參考下
    2017-03-03
  • angularjs實(shí)現(xiàn)文字上下無縫滾動(dòng)特效代碼

    angularjs實(shí)現(xiàn)文字上下無縫滾動(dòng)特效代碼

    這篇文章主要介紹了angularjs實(shí)現(xiàn)文字上下無縫滾動(dòng)特效代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • angularJs的ng-class切換class

    angularJs的ng-class切換class

    這篇文章主要介紹了angularJs的ng-class切換class,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • AngularJs  Understanding Angular Templates

    AngularJs Understanding Angular Templates

    本文主要介紹AngularJs Understanding Angular Templates的資料,這里整理了詳細(xì)的資料及簡(jiǎn)單示例代碼,有興趣的小伙伴的參考下
    2016-09-09
  • Angular中樣式綁定解決方案

    Angular中樣式綁定解決方案

    這篇文章主要介紹了Angular中樣式綁定解決方案,使用ngClass和ngStyle可以進(jìn)行樣式的綁定,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 在Angular中實(shí)現(xiàn)懶加載的示例代碼

    在Angular中實(shí)現(xiàn)懶加載的示例代碼

    在Angular中,懶加載技術(shù)通過路由配置實(shí)現(xiàn)模塊的按需加載,可優(yōu)化應(yīng)用啟動(dòng)時(shí)間和減少初始加載代碼量,首先創(chuàng)建獨(dú)立模塊,在模板中使用<router-outlet>插入懶加載組件,并可采用預(yù)加載策略如PreloadAllModules,以提前加載所有懶加載模塊,優(yōu)化加載性能
    2024-10-10
  • 詳解使用路由延遲加載 Angular 模塊

    詳解使用路由延遲加載 Angular 模塊

    這篇文章主要介紹了詳解使用路由延遲加載 Angular 模塊,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 使用AngularJS實(shí)現(xiàn)可伸縮的頁面切換的方法

    使用AngularJS實(shí)現(xiàn)可伸縮的頁面切換的方法

    這篇文章主要介紹了使用AngularJS實(shí)現(xiàn)可伸縮的頁面切換的方法,AngularJS是一款熱門的JavaScript庫,需要的朋友可以參考下
    2015-06-06
  • AngularJS中directive指令使用之事件綁定與指令交互用法示例

    AngularJS中directive指令使用之事件綁定與指令交互用法示例

    這篇文章主要介紹了AngularJS中directive指令使用之事件綁定與指令交互用法,結(jié)合實(shí)例形式分析了directive指令在模板的使用,事件的綁定及元素、屬性、控制器之間的交互相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11

最新評(píng)論