2015-06-14 84 views
1

我最近遇到了這個問題的角度指令: 我:directive-adirective-b如何嘲笑有需要現場

指令-B有一個`要求:「^指令,一個」領域,這使得單位測試不可能。

我用來編譯這樣的指令在我的單元測試:

element = $compile('<directive-a></directive-a>')($scope); 

然後,我可以得到element.isolateScope()

隔離範圍,但現在由於B對一個依賴,我不得不這樣做:

element = $compile('<directive-a> <directive-b></directive-b> </directive-a>')($scope); 

在這種情況下element.isolateScope()返回指令-a的範圍,而不是指令-b。

如何獲得directive-b的範圍?

演示:

指令答:

(function(){ 
'use strict'; 

function directiveA(){ 
    return { 
     restrict: 'E', 
     templateUrl: '/main/templates/directiveA.html', 
     transclude: true, 
     scope: { 
      attr1: '=' 
     }, 
     controller: function($scope){ 
      //code... 
     }, 
     link: function($scope, element, attrs, ctrl, transclude){ 
      injectContentIntoTemplate(); 

      function injectContentIntoTemplate(){ 
       transclude(function (clone) { 
        element.find('#specificElement').append(clone); 
       }); 
      } 
     } 
    }; 
} 

angular 
    .module('myModule') 
    .directive('directiveA', directiveA); 
}()); 

指令B:

(function(){ 
'use strict'; 

function directiveB(){ 
    return { 
     restrict: 'E', 
     templateUrl: '/main/templates/directiveA.html', 
     transclude: true, 
     replace: true, 
     scope: { 
      attr1: '@' 
     }, 
     require: '^directiveA', 
     link: function ($scope, element, attrs, ctrl) { 
      $scope.customVariable = 'something'; 
     } 
    }; 
} 

angular 
    .module('myModule') 
    .directive('directiveB', directiveB); 
}()); 

回答

0

遲到的回答,和未經考驗的。

let element = $compile('<directive-a> <directive-b></directive-b> </directive-a>')($scope); 
let elementB = element.find('directive-b'); 
let BsScope = elementB.isolateScope(); 
+0

謝謝@休斯頓,但我的問題是如何模擬,而不是如何編譯。這是兩種不同的解決方案。我更喜歡嘲笑我的內心指令,而不是執行它。 – Iamisti

+0

Hrm。你的問題是關於訪問內部指令的範圍,所以我試圖回答。如果你還有一個關於如何嘲笑內部指令的問題,那麼你也應該問一個問題。 ;-) –

+0

對不起,你沒錯。你回答了我的問題。 – Iamisti