2014-01-28 15 views
6

die folgende Anweisung gegebenTesting focus() auf ein Element in einer AngularJS Richtlinie Vorlage

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'); 
      }; 
     } 
    }; 
}); 

ich getestet habe, dass der Fokus-Beobachter in einem Browser funktioniert, aber ich möchte in der Lage sein, es zu triggern in einem Komponententest. Dies ist, was ich versucht habe, aber es funktioniert nicht.

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

Ich kann sehen, dass ich mit dem Fund Aufruf an das Eingabefeld richtig bin immer, und ich mag, dass Code erwarten, dass das Fokus-Ereignis auf dem Eingabefeld auszulösen, aber nichts geschieht. Was fehlt mir hier?

+0

Ich glaube nicht, dass zeigt tun müssen, um 'element.find ('input') 'das Element _ist_ das Eingabe-Tag – dcodesmith

+0

Replace wird auf false gesetzt. 'Element' ist das Div und in ihm enthalten ist das Input-Tag. – grivescorbett

+0

Oh, ich habe diesen Teil verpasst – dcodesmith

Antwort

17

Wenn Sie versuchen, Ereignisse auf Winkelelemente auszulösen, sollte man die triggerHandler() Funktion verwenden, die nur wirklich jqLite Funktion und nicht Winkel ist und dann das Ereignis als String-Parameter übergeben, wie unten gezeigt.

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

Um andere Funktionen auf einem Winkelelement ausführen, lesen Sie die Dokumentation here, es Ihnen eine Liste der verfügbaren Funktionen Winkelelemente

Sie
Verwandte Themen