2016-06-14 76 views
0

假設我有my-drtv1指令,該指令在其視圖中創建了my-drtv2,在其視圖中創建了my-drtv3,依此類推直到my-drtv5創建嵌套指令時的角流

my-drtv1的控制器中,有一個$http調用,它的回調引發了一個事件,該事件將在my-drtv5中捕獲到監聽器中。

.directive('myDrtv1', function() { 
    return { 
     controller: function ($scope,$http) { 
      $http.get(this.requestUrl,{params:params}).then(function() { 
       $scope.$broadcast("Got it"); 
      }) 
     } 
    } 
}) 
.directive('myDrtv5', function() { 
    return { 
     controller: function ($scope) { 
      $scope.$on('Got it', fucntion() { 
       ... 
      }) 
     } 
    } 
}) 

我是否有定義總是回調$http.then(...)將在$scope.$on('Got it', fucntion() {...})後發生的保證?

+0

您可以使用'$ rootScope。$ broadcast('Got it',function(){...})'確保應用程序中的每個偵聽器都會收到事件。 –

+0

這不是我的問題的重點,關鍵在於$ http響應時間。 – URL87

回答

0

爲了確保drtv5處理事件時,可以通知drtv1具有相同mecanism:

.directive('myDrtv1', function() { 
return { 
    controller: function ($scope,$http) { 
     $scope.$on('handled', fucntion() { 
      $http.get(this.requestUrl,{params:params}).then(function() { 
       $scope.$broadcast("Got it"); 
      }) 
     } 
    } 
} 
}) 
.directive('myDrtv5', function() { 
    return { 
    controller: function ($scope) { 
     $scope.$on('Got it', fucntion() { 
      ... 
     }) 
     $scope.emit('handled') 
    } 
    } 
}) 

,或者如果你不使用隔離範圍呼叫drtv1定義的方法:

.directive('myDrtv1', function() { 
return { 
    controller: function ($scope,$http) { 
     $scope.ready = function() { 
      $http.get(this.requestUrl,{params:params}).then(function() { 
       $scope.$broadcast("Got it"); 
      }) 
     } 
    } 
} 
}) 
.directive('myDrtv5', function() { 
    return { 
    controller: function ($scope) { 
     $scope.$on('Got it', fucntion() { 
      ... 
     }) 
     $scope.ready(); 
    } 
    } 
})