Soy bastante nuevo en Angular2 y tengo un pequeño problema:
En mi HTML de componente de inicio de sesión, tengo dos casillas de verificación, que deseo vincular de forma bidireccional el enlace de datos con el tipo de componente Componente de inicio de sesión.
Este es el HTML:
<div class="checkbox">
<label>
<input #saveUsername [(ngModel)]="saveUsername.selected" type="checkbox" data-toggle="toggle">Save username
</label>
</div>
Y este es el 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 hago clic en una casilla de verificación, obtengo el valor correcto en el controlador (componente).
Pero si cambio el valor de, por ejemplo, saveUsername
en el componente, la casilla de verificación no "obtiene" el nuevo valor.
Así que no puedo manipular la casilla de verificación del Componente (como quiero hacer ngOnInit
en el componente.
¡Gracias por tu ayuda!
html
angular
typescript
checkbox
data-binding
Junias
fuente
fuente
Respuestas:
Puede quitar
.selected
desaveUsername
en su entrada de casilla ya saveUsername es un valor lógico. En lugar de[(ngModel)]
usar[checked]="saveUsername" (change)="saveUsername = !saveUsername"
Editar: Solución correcta:
Actualización: Al igual que @newman notó que cuando
ngModel
se usa de una forma no funcionará. Sin embargo, debe usar el[ngModelOptions]
atributo like (probado en Angular 7):También creé un ejemplo en Stackblitz: https://stackblitz.com/edit/angular-abelrm
fuente
$scope.loginData = {}; $scope.loginData.username = window.localStorage.getItem("username");
y esto en la plantilla:<ion-toggle ng-model="saveUsername" ng-change="toggleSaveUsername()" toggle-class="toggle-energized">Benutzername speichern</ion-toggle>
[(ngModel)]="saveUsername"
no funciona, pero este funciona. Debe ser un error en angular?ngModel
se usa de forma no funcionará.[ngModelOptions]="{standalone: true}"
es lo que necesitabaLamentablemente, la solución proporcionada por @hakani no es un enlace bidireccional . Solo maneja el modelo de cambio unidireccional desde la parte UI / FrontEnd.
En cambio lo simple:
hará un enlace bidireccional para la casilla de verificación.
Posteriormente, cuando Model checkboxFlag se cambia de Backend o UI, es decir, checkboxFlag almacena el estado real de la casilla de verificación.
Para estar seguro, he preparado el código Plunker para presentar el resultado: https://plnkr.co/edit/OdEAPWRoqaj0T6Yp0Mfk
Solo para completar esta respuesta, debe incluir la matriz
import { FormsModule } from '@angular/forms'
intoapp.module.ts
y add to imports, es decirfuente
ngFor
, mientras repite una serie de objetos como[{"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" />
Estoy trabajando con Angular5 y tuve que agregar el atributo "nombre" para que el enlace funcione ... El "id" no es necesario para el enlace.
fuente
Prefiero algo más explícito:
componente.html
componente.ts
fuente
8.2.11
.Cuando usas
<abc [(bar)]="foo"/>
sintaxis en angular.Esto se traduce en:
<abc [bar]="foo" (barChange)="foo = $event" />
Lo que significa que su componente debería tener:
fuente
Puede usar algo como esto para tener un enlace de datos bidireccional:
fuente
Para que funcione la casilla de verificación, debe seguir todos estos pasos:
FormsModule
en tu móduloform
etiquetasu entrada debería ser así:
Nota: no olvide poner nombre en su entrada.
fuente
Debe agregar
name="selected"
atributo alinput
elemento.Por ejemplo:
fuente
He hecho un componente personalizado probado enlace bidireccional
Mi componente:
<input type="checkbox" [(ngModel)]="model" >
Lo extraño es que esto funciona
mientras esto no
fuente
En cualquier situación, si tiene que vincular un valor con una casilla de verificación que no es booleana, puede probar las siguientes opciones
En el archivo HTML:
en el componente
ischeckedWithOutBoolean: any = 'Y';
Ver en el stackblitz https://stackblitz.com/edit/angular-5szclb?embed=1&file=src/app/app.component.html
fuente
Sé que puede ser una respuesta repetida, pero para cualquiera que quiera cargar la lista de casillas de verificación con la casilla de verificación selectall en forma angular, sigo este ejemplo: Seleccione todas / deseleccione todas las casillas usando angular 2+
funciona bien pero solo necesita agregar
El HTML final debería ser así:
Mecanografiado
espero que esto ayude gracias
fuente
Una solución alternativa para lograr lo mismo, especialmente si desea utilizar la casilla de verificación con el bucle for, es almacenar el estado de la casilla de verificación dentro de una matriz y cambiarlo según el índice del
*ngFor
bucle. De esta manera, puede cambiar el estado de la casilla de verificación en su componente.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
fuente
Mi directiva angular como angularjs (ng-true-value ng-false-value)
html
fuente
En la casilla de verificación p angular,
Utilice todos los atributos de la casilla de verificación p
Y lo que es más importante, no olvide incluirlo
[ngModelOptions]="{standalone: true}
, ya que AHORRÓ MI DÍA.fuente
archivo .html
archivo .ts
fuente