2016-06-14 2 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 с тем же: Механизм,

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