91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

大埔区| 兴隆县| 岳普湖县| 进贤县| 黄浦区| 宜兰市| 顺平县| 岳阳市| 屯留县| 合山市| 鄯善县| 成武县| 西贡区| 手机| 呼玛县| 鹤庆县| 马公市| 唐山市| 安丘市| 营口市| 扶余县| 喜德县| 望城县| 泰顺县| 集安市| 东丽区| 安多县| 自治县| 江油市| 明水县| 卓尼县| 文登市| 行唐县| 梓潼县| 河东区| 台前县| 天祝| 庆城县| 开江县| 新平| 洪泽县|