2014-01-28 89 views
6

鑑於以下指令測試重點()的元素在AngularJS指令模板

directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     scope: {}, 
     replace: false, 
     template: '<input ng-focus="onFocus()" type="text" />', 
     link: function(scope, element, attr) { 
      scope.onFocus = function() { 
       console.log('got focus'); 
      }; 
     } 
    }; 
}); 

我測試的重點觀察者在瀏覽器中工作,但我希望能夠觸發它在單元測試中。這是我試過的,但它不起作用。

var element = angular.element('<div my-directive></div>'); 
$compile(element)($scope); 
$scope.$digest(); 
element.find('input')[0].focus(); 

我可以看到,我得到正確與查找電話輸入框,和我預料的代碼來觸發輸入框的焦點事件,但什麼也沒有發生。我在這裏錯過了什麼?

+0

我不認爲你需要做的'element.find( 'input')'元素_is_輸入標籤 – dcodesmith

+0

Replace被設置爲false。 'element'是div,它包含在輸入標籤中。 – grivescorbett

+0

噢,我錯過了那部分 – dcodesmith

回答

17

當試圖觸發角元素上的事件時,應該使用triggerHandler()函數,它只是真正的jqLit​​e函數而不是角度函數,然後將事件作爲字符串參數傳遞,如下所示。

element.find('input').triggerHandler('focus'); 

爲角元素上執行其他功能,閱讀文檔here,就說明你提供給角元素的函數列表