59 votes

Comment rendre en lecture seule toutes les entrées dans un div en Angular2 ?

J'ai une page avec plusieurs entrées, et je veux la rendre ' readOnly ' Je trouve cette solution : Comment modifier l'attribut readonly et required d'un élément HTML dans Angular2 Typescript ?

Mais je ne veux pas le faire pour chaque entrée séparément.

Comment puis-je ajouter readOnly à toutes les entrées dans une certaine division.

0 votes

Essayez-vous de faire cela dans des formulaires dynamiques ?

0 votes

Veuillez ajouter le code qui démontre ce que vous essayez d'accomplir, ce que vous avez essayé et où vous avez échoué.

122voto

Avnesh Shakya Points 2472

Essayez ceci dans le champ de saisie :

[readonly]="true"

J'espère que ça va marcher.

12 votes

FWIW Cela ne fait rien aux entrées de type eg. checkbox . Vous devez utiliser [disabled] pour ça.

0 votes

Peut aller avec cela aussi disabled="true".

0 votes

Avec 'disable' l'entrée n'émet pas d'événements mais avec 'readyonly' elle se comporte comme disable mais émet des événements, je l'ai utilisé parce que le composant modifie la valeur et j'aime contrôler cela avec des messages dans le modèle frontal, pour cela je l'ai utilisé, d'autres façons de réaliser cela ? à l'intérieur de l'entrée j'ai une var locale pour toutes les validations html5 et je passe la var à la fonction personnalisée pour activer ou désactiver le bouton submit

21voto

Si vous voulez faire un groupe entier, et pas seulement un champ à la fois, vous pouvez utiliser le HTML5 <fieldset> étiquette.

<fieldset [disabled]="killfields ? 'disabled' : null">

    <!-- fields go here -->

</fieldset>

15voto

snort Points 192

Si vous utilisez des formulaires réactifs, vous pouvez également désactiver le formulaire entier ou tout sous-ensemble de contrôles dans un FormGroup à l'aide de la commande myFormGroup.disable() .

2 votes

Cela empêchera effectivement le code submit d'obtenir la valeur du FormGroup.

0 votes

@BoazRymland Pas vrai pour Angular 6 : FormGroup.value encore disponible après FormGroup.disable .

0 votes

Angular 6 : La désactivation d'un champ valide entraîne l'apparition d'un champ non valide.

7voto

Ahmed Elkoussy Points 885

Si vous voulez désactiver toutes les entrées d'un formulaire Angular en une seule fois :

1- Formes réactives :

myFormGroup.disable() // where myFormGroup is a FormGroup 

2- Formulaires pilotés par des modèles (NgForm) :

Vous devriez saisir le NgForm dans une variable NgForm (par ex. nommée myNgForm) puis

myNgForm.form.disable() // where form here is an attribute of NgForm 
                      // & of type FormGroup so it accepts the disable() function

Dans le cas de NgForm, veillez à appeler la méthode de désactivation au bon moment.

Pour déterminer quand l'appeler, vous pouvez trouver plus de détails dans cette réponse de Stackoverflow

0 votes

La réponse est assez claire : si vous voulez désactiver des champs, vous devez le faire et ainsi de suite.

0 votes

0 votes

Super, merci pour l'info. Cela résout quand même le problème pour de nombreux cas d'utilisation où vous devez afficher des données sans que l'utilisateur les modifie. C'est particulièrement vrai si vous voulez le faire en vrac pour l'ensemble du formulaire au lieu de traiter les entrées une par une.

5voto

Leo Lanese Points 99

Toutes les entrées doivent être remplacées par une directive personnalisée qui lit une seule variable globale pour activer le statut de lecture seule.

// template
<your-input [readonly]="!childmessage"></your-input>

// component value
childmessage = false;

1 votes

Veuillez ajouter une description à votre réponse. D'un point de vue professionnel, je suppose que vous voulez dire que toutes les entrées doivent être remplacées par une directive personnalisée qui lit une seule variable globale pour activer le statut de lecture seule. Mais cela pourrait être faux, et ce n'est certainement pas évident pour la plupart des lecteurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X