Angulaire 2 focus d'entrée ne fonctionne pas
Les entrées sont à l'intérieur d'une boîte de dialogue modale. Je n'ai aucune idée de pourquoi ça ne fonctionne pas. J'ai regardé les docs officielles et de la liste focus comme quelque chose que vous pouvez passer à l'élément, mais il ne fonctionne pas?
Personne ne sait pourquoi?
Angulaire Du Matériel D'Entrée De Docs
<form class="example-form">
<md-input-container class="example-full-width" style="width: 300px; padding: 5px; border-radius: 10px;">
<input mdInput type="email" name="to" placeholder="Email">
<md-error></md-error>
</md-input-container>
<md-input-container focus focused>
<input mdInput type="text" name="a" placeholder="zzzz" focus focused (focus)="">
</md-input-container>
</form>
Pouvez-vous décrire plus précisément le problème? Ne pouvez-vous pas compiler le code? Se bloque lorsque vous exécutez? T-il se comporter différemment que prévu? Quel est le message d'erreur? Ce que le comportement attendu? Quel est le comportement efficace?
On dirait que vous avez à utiliser
On dirait que vous avez à utiliser
focused="true"
OriginalL'auteur Knack Kwenie | 2017-04-19
Vous devez vous connecter pour publier un commentaire.
Vos tentatives ne fonctionnent pas car:
focused
est une propriété de conduire la mat-catégorie ciblée surmdInputContainer
. Vous pouvez l'utiliser pour savoir si votre entrée est porté ou non. Vous ne pouvez pas l'utiliser pour modifier l'état de focalisation.focus
est une méthode demdInput
qui vous permet par programme concentrer l'entrée. Vous pouvez appeler lamyInput.focus()
avecmyInput
être quelque chose commeViewChild('myInput')
par exemple.Mais la façon la plus simple d'obtenir ce que vous voulez est d'utiliser la norme
autofocus
attribut :autofocus
ne fonctionne que lorsque la page se charge. Pour notre application, nous sommes à la compilation et à l'injection d'une fenêtre lorsqu'un utilisateur ajoute une nouvelle "rubrique".autofocus
semble les travaux de la première fois que l'utilisateur tente d'ajouter un élément, mais ne fait rien par la suite. Juste une chose à garder à l'esprit.J'ai remarqué que parfois d'autres éléments de "voler" focus une fois la page chargée. Par exemple, ma <mat-saisie semi-automatique> semble prendre le focus que l'autofocus sur un autre élément.
OriginalL'auteur David Palita
Puis dans le contrôleur:
Ce que cela.emailInput.focus() est en fait "elementRef.nativeElement.focus()"
https://github.com/angular/material2/blob/master/src/lib/input/input.ts#L287
de sorte que vous pourriez faire votre auto comme:
OriginalL'auteur Mackelito
J'ai été aux prises avec le même problème. J'ai été à l'aide de la touche F6 pour ouvrir la boîte de dialogue et je ne pouvais pas le
<input>
pour obtenir le focus. Il s'est avéré que je n'étais pas empêcher le comportement par défaut de la touche F6 et F6 souligne l'adresse URL du navigateur de la fenêtre; c'était un vol de se concentrer.Aussi, pas de magie attribut de balise fonctionne. L'Autofocus, Concentré, se Concentrer, que ce soit, pas de dés. J'ai dû créer une directive et l'utiliser dans mon élément input. J'ai obtenu de l'aide avec l'aide de cette réponse.
Ici, c'est l'élément après l'ajout de la directive (numberOnly est une autre directive que pour nombre d'entrée):
**Edit : Ajout de la Directive de code comme suggéré par @Mackelito pour plus de clarté.
Voici la directive j'ai écrit à l'aide de la réponse que j'ai lié ci-dessus. Gardez à l'esprit le matériel a changé leur étiquette étiquettes à
<input matInput>
de<input md-input>
[Focus] répertoriés dans l'élément est une directive que j'ai écrit. Je n'étais pas en laissant entendre que c'était une directive que le matériel d'entrée est venu avec la sortie de la boîte.
Après, j'ai répondu, vous avez quitté le downvote en place. Je ne suis pas clair pourquoi. Pouvez-vous offrir un moyen d'améliorer la réponse si il est difficile de savoir ou de retirer le bas de vote s'il vous plaît?
ops!.. seulement ont été à la maison avec mon fils malade... va upvote.. bien que vous pouvez supprimer le "trompeur" directives.. ils n'ont pas vraiment apporter quelque chose à la table 😉
(Btw: vous devez mettre à jour votre réponse si je vais être capable de upvote 😉
OriginalL'auteur Hodglem
Avez-vous essayez avec
cdkFocusInitial
qui permettra de spécifier l'élément qui recevra le focus lors de l'initialisationdocumentation peut être trouvée ici
OriginalL'auteur Jayampathy Wijesena
Vous pouvez généralement placer le focus sans Tapuscrit de code, en utilisant le Modèle de balisage. Mais dans le cas d'une boîte de Dialogue, vous aurez besoin d'utiliser @Mackelito de la solution avec
@ViewChild
etngAfterViewInit()
.J'ai dû me concentrer un TextArea qui est à l'intérieur d'un Menu lorsque le Menu s'affiche. Heureusement, le Menu a un (menuOpened) cas je pourrait lier.
L'important est ici la
(menuOpened)="newTypes.focus()"
et nous voyons lanewTypes
est un TemplateRef variable attachée à la TextArea, je veux me concentrer marqué comme<textarea #newTypes
.Voici une capture d'écran qui montre mon menu de l'ouverture, et il devient immédiatement le focus à la zone de texte à l'intérieur.
OriginalL'auteur H Dog
Essayez d'ajouter un peu de retard avant de régler l'entrée d'obtenir le focus. J'ai fait ce comportement à une directive pour votre référence.
retard-focus.ts
exemple
Vous pouvez essayer ici.
OriginalL'auteur Indiana