Angular2+ autofocus élément d'entrée
Comment puis-je autofocus élément d'entrée? Semblable à cette question, mais pas avec AngularDart. Quelque chose comme ceci:
<input type="text" [(ngModel)]="title" [focus] />
//or
<input type="text" [(ngModel)]="title" autofocus />
Ne Angular2 a tout à construire dans le support de cette fonctionnalité?
Mieux fermer question est cette une, mais est-il plus court/solution plus facile, puisque je n'ai pas de "liste de champs". Dans le lien fourni *ngFor="#input of inputs"
est utilisé, mais j'ai seulement 1 d'entrée dans le modèle de contrôle.
- deuxième alternative devrait fonctionner tout droit sorti de la boîte. Il n'en a pas?
- Non, il n'est pas.
- Simplement à l'aide de "autofocus" ne fonctionne pas parce que ce n'est efficace que lorsque la page se charge, non pas le moment Angulaire est la permutation de contenu et de sortir.
- Ce sujet de la liaison: [attr.autofocus]="état"?
Vous devez vous connecter pour publier un commentaire.
C'est mon code actuel:
cas d'utilisation:
Codes périmés (ancien réponse, juste au cas où):
J'ai fini avec ce code:
Si j'ai mis le code dans
ngOnViewInit
il ne fonctionne pas. Code aussi utiliser les meilleures pratiques, depuis l'appel de se concentrer sur l'élément directement n'est pas recommandé.Édité (conditionnel autofocus):
Il y A quelques jours j'avais besoin d'conditionnelle auto focus, parce que j'ai cacher d'abord autofocus élément et je veux me concentrer un autre, mais uniquement lors de la première n'est pas visible, et j'ai fini avec ce code:
Edited2:
Moteur de rendu.invokeElementMethod est obsolète et de nouvelles Renderer2 ne le supporte pas.
Nous sommes donc de retour à la maternelle focus (qui ne travaillent pas à l'extérieur de DOM - SSR, par exemple!).
cas d'utilisation:
OnInit
a fonctionné pour moi. Je n'ai pas eu à utiliser leAfterViewInit
.setTimeout
mais c'était le seul moyen que j'ai réussi à le faire fonctionner. Espérons que ça fonctionne pour vous. Laissez-moi savoir. Mon Angulaire version est5.2.3
.autofocus
est un natif html fonctionnalité qui devrait fonctionner au moins pour la page d'initialisation. Cependant, il ne parvient pas à travailler avec de nombreux angulaire des scénarios, en particulier avec*ngIf
.Vous pouvez faire un vraiment simple et personnalisé directive pour obtenir le comportement souhaité.
La directive ci-dessus fonctionne pour mon cas d'utilisation.
Comment utiliser
EDIT: Il semble y avoir usecases où il est trop tôt pour appeler focus dans le
OnInit
cycle de vie de la méthode. Si c'est le cas, le changement deOnAfterViewInit
à la place.La directive suivante fonctionne pour moi en utilisant Angulaire 4.0.1
l'utiliser comme ceci:
La possibilité d'utiliser OnInit événement de cycle de vie n'a pas de travail pour moi. J'ai aussi essayé d'utiliser le moteur de Rendu dans l'autre réponse, qui n'a pas fonctionné pour moi.
Vous pouvez affecter l'élément d'entrée d'un modèle de référence variable
#myInput
:Laissez votre composant de mettre en œuvre
AfterViewInit
, saisissez la référence de l'élément d'entrée avec leViewChild
d'annotation et de concentrer votre élément dans lengAfterViewInit
crochet:_inputElement
après le point de vue a été initialisé?juste ajouter {{ myInput.focus() }} à droite après l'entrée à l'intérieur de modèle
Si vous n'avez pas besoin de vrai/faux de la fonctionnalité, mais souhaitez autofocus toujours, il y a une courte mise en œuvre de Makla la solution:
autofocus.la directive.ts:
cas d'utilisation:
À l'aide de AfterViewInit au lieu de OnInit rend le curseur placé après le contenu à l'intérieur de champ de saisie, doit-il être rempli.
N'oubliez pas de déclarer et exportation votre directive dans votre module!