中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

AngularJS如何實現異步

發布時間:2021-07-06 11:21:41 來源:億速云 閱讀:153 作者:小新 欄目:web開發

小編給大家分享一下AngularJS如何實現異步,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

AngularJS 異步解決實現方法

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

        場景一:通過回調函數進行異步操作(該情況下不用消息廣播的機制)

        這種情況的特點是直接傳遞一個回調函數給異步操作就可以了,等異步操作完執行回調。

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

        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; 
    } 
  }); 
};

         最后一個參數即為回調函數

         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){ 
       ... 
           //調用回調方法 
           fn(data[0]); 
     } 
      }) 
     .error(function(data,header,config,status){ 
    alert("驗證服務請求失敗!"); 
     }); 
  } 
}

         場景二:沒有傳遞回調函數的地方,這個時候就必須用到消息廣播的機制。

         比如:我的controller通過server異步獲取數據,這個時候我用回調函數保證取到數據后做后續操作。但是我的后續操作需要通過指令進行DOM的生成。這個時候我們是沒有辦法直接調用指令的link或者compile的。這個時候我們需要用到廣播$scope.$broadcast。發送廣播以后,需要通過$scope.$on進行監聽。

         controller代碼片段舉例如下:

//通過categoryService異步取數據 
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("驗證服務請求失敗!"); 
  }); 
}

         directive代碼片段舉例如下:

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

最后,如果我們在這個controller中需要調用另外一個模塊的指令的link或者compile或者另一個模塊的controller怎么辦。我們需要通過依賴注入$rootScope服務,因為他是所有作用域的父,然后調用$emit這個服務進行廣播。指令中通過$rootScope.$on進行接收即可。

        模塊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 
    }); 
};

以上是“AngularJS如何實現異步”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富顺县| 麻城市| 永安市| 宝丰县| 龙里县| 南郑县| 广南县| 道孚县| 安福县| 九台市| 柳河县| 合阳县| 昭平县| 林芝县| 朝阳市| 易门县| 洪洞县| 浪卡子县| 东丽区| 邻水| 桦川县| 炎陵县| 合水县| 佛学| 舒城县| 汝阳县| 阳新县| 雷山县| 佛教| 高碑店市| 北辰区| 康乐县| 钦州市| 龙州县| 莒南县| 穆棱市| 喀喇沁旗| 巴楚县| 郧西县| 凉城县| 青海省|