Ich habe eine zweifache Bindungs-Fokus-Anweisung geschrieben, genau wie kürzlich das Modell.
Sie können die Fokus-Anweisung folgendermaßen verwenden:
Wenn Sie die someFocusVariable-Scope-Variablen true
irgendwo in Ihrem Controller setzen, wird das Eingabefeld fokussiert. Und wenn Sie Ihr Eingabefeld "ausblenden" möchten, kann someFocusVariable auf false gesetzt werden. Es ist ähnlich wie die erste Antwort von Mark Rajcok, aber mit zweifacher Bindung.
Hier ist die Anweisung:
function Ctrl($scope) {
$scope.model = "ahaha"
$scope.someFocusVariable = true; // Wenn Sie anfangs den Fokus setzen möchten, setzen Sie dies auf true. Andernfalls müssen Sie dies überhaupt nicht definieren.
}
angular.module('experiement', [])
.directive('focus', function($timeout, $parse) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
scope.$watch(attrs.focus, function(newValue, oldValue) {
if (newValue) { element[0].focus(); }
});
element.bind("blur", function(e) {
$timeout(function() {
scope.$apply(attrs.focus + "=false");
}, 0);
});
element.bind("focus", function(e) {
$timeout(function() {
scope.$apply(attrs.focus + "=true");
}, 0);
})
}
}
});
Verwendung:
Eine Eingabe:
Fokus!
someFocusVariable: {{ someFocusVariable }}
Inhalt: {{ model }}
Hier ist der Fiddle:
http://fiddle.jshell.net/ubenzer/9FSL4/8/