Ich bin ziemlich neu in Angular2 und habe ein kleines Problem:
In meinem Login-Component-HTML habe ich zwei Kontrollkästchen, die ich auf zwei Arten an das Login-Component-TypeScript binden möchte.
Dies ist der HTML:
<div class="checkbox">
<label>
<input #saveUsername [(ngModel)]="saveUsername.selected" type="checkbox" data-toggle="toggle">Save username
</label>
</div>
Und das ist die 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']);
}
Wenn ich auf ein Kontrollkästchen klicke, erhalte ich den richtigen Wert in der Steuerung (Komponente).
Wenn ich jedoch den Wert von beispielsweise saveUsername
in der Komponente ändere , hat das Kontrollkästchen den neuen Wert nicht "erhalten".
Daher kann ich das Kontrollkästchen in der Komponente nicht bearbeiten (wie ich es ngOnInit
in der Komponente tun möchte .
Danke für Ihre Hilfe!
html
angular
typescript
checkbox
data-binding
Junias
quelle
quelle
Antworten:
Sie können entfernen
.selected
aussaveUsername
Ihrer Checkbox Eingabe seit saveUsername ein boolean ist. Anstelle von[(ngModel)]
Gebrauch[checked]="saveUsername" (change)="saveUsername = !saveUsername"
Bearbeiten: Richtige Lösung:
Update: Wie @newman bemerkt hat, wenn
ngModel
es in einem Formular verwendet wird, funktioniert es nicht. Sie sollten jedoch ein[ngModelOptions]
Attribut wie (getestet in Angular 7) verwenden:Ich habe auch ein Beispiel bei Stackblitz erstellt: https://stackblitz.com/edit/angular-abelrm
quelle
$scope.loginData = {}; $scope.loginData.username = window.localStorage.getItem("username");
und das in der Vorlage:<ion-toggle ng-model="saveUsername" ng-change="toggleSaveUsername()" toggle-class="toggle-energized">Benutzername speichern</ion-toggle>
[(ngModel)]="saveUsername"
, aber diese funktioniert. Es muss ein Fehler im Winkel sein?ngModel
es in einem Formular verwendet wird, funktioniert es nicht.[ngModelOptions]="{standalone: true}"
ist was ich brauchte.Leider ist die von @hakani bereitgestellte Lösung keine bidirektionale Bindung . Es wird nur das Einwegmodell aus dem UI / FrontEnd-Teil geändert.
Stattdessen das einfache:
führt eine bidirektionale Bindung für das Kontrollkästchen durch.
Wenn anschließend das Modell checkboxFlag von Backend oder UI-Teil voila geändert wird, speichert checkboxFlag den tatsächlichen Status des Kontrollkästchens.
Um sicherzugehen, dass ich Plunker-Code vorbereitet habe, um das Ergebnis zu präsentieren: https://plnkr.co/edit/OdEAPWRoqaj0T6Yp0Mfk
Um diese Antwort zu vervollständigen, sollten Sie das Array "
import { FormsModule } from '@angular/forms'
In"app.module.ts
und "Import" hinzufügenquelle
ngFor
, während Sie eine Reihe von Objekten wie[{"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" />
Ich arbeite mit Angular5 und musste das Attribut "name" hinzufügen, damit die Bindung funktioniert ... Die "id" ist für die Bindung nicht erforderlich.
quelle
Ich bevorzuge etwas expliziteres:
component.html
component.ts
quelle
8.2.11
.Bei Verwendung der
<abc [(bar)]="foo"/>
Syntax für Winkel.Dies bedeutet:
<abc [bar]="foo" (barChange)="foo = $event" />
Was bedeutet, dass Ihre Komponente haben sollte:
quelle
Sie können einfach so etwas verwenden, um eine bidirektionale Datenbindung zu erhalten:
quelle
Um das Kontrollkästchen zum Laufen zu bringen, sollten Sie alle folgenden Schritte ausführen:
FormsModule
in Ihr Modul importierenform
Tag einIhre Eingabe sollte folgendermaßen aussehen:
Hinweis: Vergessen Sie nicht, den Namen in Ihre Eingabe einzugeben.
quelle
Sie müssen
name="selected"
deminput
Element ein Attribut hinzufügen .Beispielsweise:
quelle
Ich habe eine benutzerdefinierte Komponente versucht, die bidirektionale Bindung
Meine Komponente:
<input type="checkbox" [(ngModel)]="model" >
Seltsame Sache ist, dass dies funktioniert
während dies nicht wird
quelle
Wenn Sie in jedem Fall einen Wert mit einem Kontrollkästchen binden müssen, das nicht boolesch ist, können Sie die folgenden Optionen ausprobieren
In der HTML-Datei:
in der Komponente
ischeckedWithOutBoolean: any = 'Y';
Siehe im stackblitz https://stackblitz.com/edit/angular-5szclb?embed=1&file=src/app/app.component.html
quelle
Ich weiß, dass es eine wiederholte Antwort sein kann, aber für jeden, der eine Liste von Kontrollkästchen mit einem Auswahlkästchen in Winkelform laden möchte, folge ich diesem Beispiel: Aktivieren Sie das Kontrollkästchen Alle / deaktivieren Sie alle mit Winkel 2+
es funktioniert gut, muss aber nur hinzugefügt werden
Der endgültige HTML-Code sollte folgendermaßen aussehen:
Typoskript
hoffe das hilft thnx
quelle
Eine Problemumgehung, um dasselbe zu erreichen, insbesondere wenn Sie das Kontrollkästchen mit der for-Schleife verwenden möchten, besteht darin, den Status des Kontrollkästchens in einem Array zu speichern und es basierend auf dem Index der
*ngFor
Schleife zu ändern . Auf diese Weise können Sie den Status des Kontrollkästchens in Ihrer Komponente ändern.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
quelle
Meine Winkelanweisung wie anglejs (ng-true-value ng-false-value)
html
quelle
Im Winkel-p-Kontrollkästchen
Verwenden Sie alle Attribute des Kontrollkästchens p
Und was noch wichtiger ist, vergessen Sie nicht,
[ngModelOptions]="{standalone: true}
so gut wie es meinen Tag gerettet hat.quelle
.html Datei
.ts Datei
quelle