2016-04-15 12 views
1

Angeblich soll Ich habe einen Eingabetext Markup wie dies verhindern:Wie ngBlur von Brennen ersten

<input type="text" ng-focus="x = true" ng-blur="x = false"> 

Also, wenn Sie darauf klicken, zeigt dieses div bis:

<div ng-show="x === true"> 
    <ul> 
     <li ng-click="choose(1)">First</li> 
     <li ng-click="choose(2)">Second</li> 
     <li ng-click="choose(3)">Third</li> 
    </ul> 
</div> 

Was ist passiert, wenn ich Klicken Sie auf eine der Auswahlen in der Liste, das div wird ausgeblendet, weil das ng-blur aus dem Textfeld gefeuert wird, daher wird in der Auswahl nicht ausgeführt (oder so ist das, was in meiner Situation passiert). Gibt es einen Workaround dafür? Vielen Dank.

Antwort

1

Ein bisschen ein Hack wäre, Ihre ngBlur in eine $timeout schieben Sie es zurück einen Digest.

<input type="text" ng-focus="x = true" ng-blur="hideFields()"> 

function hideFields() { 
    $timeout(function() { 
     $scope.x = false; 
    }); 
} 
+0

Kühl. Ich werde es versuchen und melden. – Growlithe

+0

Nein, funktioniert nicht. ohne einen Timer in der Funktion, feuert es immer noch schneller als der 'ng-Klick' – Growlithe

+0

Mit Timeout müssen Sie einige Verzögerung einstellen, Unschärfe-Ereignis immer vor dem Klicken passiert, es ist nicht Winkel, sondern nur wie DOM-Ereignisse arbeiten. – dfsq