Je suis assez nouveau sur Angular2 et j'ai un petit problème:
Dans mon Login-Component-HTML, j'ai deux cases à cocher, que je veux lier de manière bidirectionnelle aux données au Login-Component-TypeScript.
Voici le HTML:
<div class="checkbox">
<label>
<input #saveUsername [(ngModel)]="saveUsername.selected" type="checkbox" data-toggle="toggle">Save username
</label>
</div>
Et voici le Component.ts:
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { Variables } from '../../services/variables';
@Component({
selector: 'login',
moduleId: module.id,
templateUrl: 'login.component.html',
styleUrls: ['login.component.css']
})
export class LoginComponent implements OnInit {
private saveUsername: boolean = true;
private autoLogin: boolean = true;
constructor(private router: Router, private variables: Variables) { }
ngOnInit() {
this.loginValid = false;
// Get user name from local storage if you want to save
if (window.localStorage.getItem("username") === null) {
this.saveUsername = true;
this.autoLogin = true;
console.log(this.saveUsername, this.autoLogin);
} else {
console.log("init", window.localStorage.getItem("username"));
}
}
login(username: string, password: string, saveUsername: boolean, autoLogin: boolean) {
this.variables.setUsername(username);
this.variables.setPassword(password);
this.variables.setIsLoggedIn(true);
console.log(saveUsername, autoLogin);
//this.router.navigate(['dashboard']);
}
Si je clique sur une case à cocher, j'obtiens la valeur correcte dans le contrôleur (composant).
Mais si je change la valeur de par exemple saveUsername
dans le composant, la case à cocher n'a pas "obtenu" la nouvelle valeur.
Je ne peux donc pas manipuler la case du composant (comme je veux le faire ngOnInit
dans le composant).
Merci de votre aide!
Réponses:
Vous pouvez supprimer
.selected
desaveUsername
dans votre entrée de case à cocher car saveUsername est un booléen. Au lieu d'[(ngModel)]
utilisation[checked]="saveUsername" (change)="saveUsername = !saveUsername"
Edit: Solution correcte:
Mise à jour: Comme @newman l'a remarqué lorsqu'il
ngModel
est utilisé dans un formulaire, cela ne fonctionnera pas. Cependant, vous devez utiliser un[ngModelOptions]
attribut comme (testé dans Angular 7):J'ai également créé un exemple sur Stackblitz: https://stackblitz.com/edit/angular-abelrm
la source
$scope.loginData = {}; $scope.loginData.username = window.localStorage.getItem("username");
et ceci dans le modèle:<ion-toggle ng-model="saveUsername" ng-change="toggleSaveUsername()" toggle-class="toggle-energized">Benutzername speichern</ion-toggle>
[(ngModel)]="saveUsername"
ne fonctionne pas, mais celle-ci fonctionne. Ça doit être un bug en angulaire?ngModel
est utilisé dans un formulaire, cela ne fonctionnera pas.[ngModelOptions]="{standalone: true}"
c'est ce dont j'avais besoin.Malheureusement, la solution fournie par @hakani n'est pas contraignante dans les deux sens . Il gère simplement le modèle de changement à sens unique de la partie UI / FrontEnd.
Au lieu de cela, le simple:
fera une liaison bidirectionnelle pour la case à cocher.
Ensuite, lorsque la case à cocher Modèle est changé de Backend ou UI part - voila, checkboxFlag stocke l'état réel de la case à cocher.
Pour être sûr d'avoir préparé le code Plunker pour présenter le résultat: https://plnkr.co/edit/OdEAPWRoqaj0T6Yp0Mfk
Juste pour compléter cette réponse, vous devez inclure le tableau
import { FormsModule } from '@angular/forms'
dansapp.module.ts
et ajouter au tableau des importations, c.-à-d.la source
ngFor
, tout en répétant un tableau d'objets comme[{"checked":true},{"checked":false}]
cUncaught Error: Template parse errors: Can't bind to 'ngModel' since it isn't a known property of 'input'
<input type="checkbox" [(ngModel)]="day.IsChecked" [checked]="day.IsChecked" />
Je travaille avec Angular5 et j'ai dû ajouter l'attribut "name" pour que la liaison fonctionne ... "L'id" n'est pas requis pour la liaison.
la source
Je préfère quelque chose de plus explicite:
component.html
component.ts
la source
8.2.11
.Lors de l'utilisation
<abc [(bar)]="foo"/>
syntaxe sur angulaire.Cela se traduit par:
<abc [bar]="foo" (barChange)="foo = $event" />
Ce qui signifie que votre composant devrait avoir:
la source
Vous pouvez simplement utiliser quelque chose comme ça pour avoir une liaison de données bidirectionnelle:
la source
Pour que la case à cocher fonctionne, vous devez suivre toutes ces étapes:
FormsModule
dans votre moduleform
balisevotre entrée devrait être comme ceci:
Remarque: n'oubliez pas de mettre un nom dans votre entrée.
la source
Vous devez ajouter un
name="selected"
attribut à l'input
élément.Par exemple:
la source
J'ai fait un composant personnalisé essayé la liaison bidirectionnelle
Mon composant:
<input type="checkbox" [(ngModel)]="model" >
chose étrange est que cela fonctionne
alors que ce n'est pas
la source
Dans toutes les situations, si vous devez lier une valeur avec une case à cocher qui n'est pas booléenne, vous pouvez essayer les options ci-dessous
Dans le fichier Html:
dans le composant
ischeckedWithOutBoolean: any = 'Y';
Voir dans le stackblitz https://stackblitz.com/edit/angular-5szclb?embed=1&file=src/app/app.component.html
la source
Je sais que la réponse peut être répétée, mais pour tous ceux qui veulent charger la liste des cases à cocher avec la case à cocher selectall sous forme angulaire, je suis cet exemple: Tout sélectionner / désélectionner toutes les cases à cocher en utilisant angulaire 2+
ça marche bien mais juste besoin d'ajouter
le HTML final devrait être comme ceci:
Manuscrit
j'espère que cette aide thnx
la source
Une solution de contournement pour obtenir la même chose spécialement si vous souhaitez utiliser la case à cocher avec pour la boucle est de stocker l'état de la case à cocher dans un tableau et de le modifier en fonction de l'index de la
*ngFor
boucle. De cette façon, vous pouvez modifier l'état de la case à cocher dans votre composant.app.component.html
<div *ngFor="let item of items; index as i"> <input type="checkbox" [checked]="category[i]" (change)="checkChange(i)"> {{item.name}} </div>
app.component.ts
la source
Ma directive angulaire comme angularjs (ng-true-value ng-false-value)
html
la source
Dans la case P angulaire,
Utiliser tous les attributs de p-checkbox
Et surtout, n'oubliez pas d'inclure
[ngModelOptions]="{standalone: true}
aussi bien que cela a sauvé ma journée.la source
fichier .html
fichier .ts
la source