Angulaire 2 Case Les Deux Sens De La Liaison De Données
Im assez nouveau pour Angular2 et j'ai un petit problème:
Dans mon Login-Composant-HTML, j'ai deux cases à cocher, qui je veux lier dans les deux sens de la liaison de données pour la Connexion Composante-Tapuscrit.
C'est le HTML:
<div class="checkbox">
<label>
<input #saveUsername [(ngModel)]="saveUsername.selected" type="checkbox" data-toggle="toggle">Save username
</label>
</div>
Et c'est le Composant.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, 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 ne pas "get" la nouvelle valeur.
Donc je ne peux pas manipuler la case à cocher de la Composante (comme je veux faire dans la ngOnInit
dans le composant.
Merci pour votre aide!
- Consultez ici Angulaire 7 exemple de case de liaison de freakyjolly.com/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez supprimer
.selected
desaveUsername
dans votre case de saisie depuis saveUsername est un booléen. Au lieu de[(ngModel)]
utilisation[checked]="saveUsername" (change)="saveUsername = !saveUsername"
Edit: Solution Correcte:
Mise à jour: Comme @newman remarqué, quand ngModel est utilisé dans un formulaire, ça ne marchera pas. Cependant, vous devez utiliser [ngModelOptions] attribut comme (testé dans Angulaire 7):
J'ai également créé un exemple à stackblitz: https://stackblitz.com/edit/angular-abelrm
$scope.loginData = {}; $scope.loginData.username = window.localStorage.getItem("username");
et cela 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 celui-ci fonctionne. Il doit être un bug dans angulaire?ngModel
est utilisé dans un formulaire, ça ne marchera pas.[ngModelOptions]="{standalone: true}"
est ce dont j'avais besoin.Malheureusement fournies par la solution de @hakani n'est pas liaison bidirectionnelle. Il a juste les poignées d'Une manière à changer de modèle de l'INTERFACE utilisateur/FrontEnd partie.
Au lieu du simple:
fera la liaison bidirectionnelle pour une case à cocher.
Par la suite, lorsque le Modèle checkboxFlag est modifiée à partir du Backend ou partie de l'INTERFACE utilisateur - voilà, checkboxFlag magasins réels case à cocher état.
Pour être sûr que j'ai préparé Plunker code de présenter le résultat : https://plnkr.co/edit/OdEAPWRoqaj0T6Yp0Mfk
Juste pour compléter cette réponse vous devez inclure le
import { FormsModule } from '@angular/forms'
enapp.module.ts
et ajouter aux importations tableau, j'.engFor
, tandis que la répétition d'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 obtenir les contraignant à travailler... La "id" est pas nécessaire pour la liaison.
Je préfère quelque chose de plus explicite:
component.html
composant.ts
Lors de l'utilisation de
<abc [(bar)]="foo"/>
de la syntaxe angulaire.Cela se traduit par:
<abc [bar]="foo" (barChange)="foo = $event" />
Ce qui signifie que votre composant doit avoir:
Vous pouvez utiliser quelque chose comme cela pour deux façon de liaison de données:
Pour obtenir case de travail, vous devez suivre ces étapes:
FormsModule
dans votre moduleform
tagvotre entrée doit être comme ceci:
Remarque: ne pas oublier de mettre le nom de votre entrée.
J'ai fait un composant personnalisé essayé une liaison bidirectionnelle
Mycomponent:
<input type="checkbox" [(ngModel)]="model" >
chose étrange est que cela fonctionne
bien que cette coutume
Vous devez ajouter
name="selected"
attributinput
élément.Par exemple:
Dans n'importe quelle situation, si vous avez de lier une valeur à une case à cocher qui n'est pas booléenne, alors 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