Я довольно новичок в Angular2 и у меня есть небольшая проблема:
В моем Login-Component-HTML у меня есть два флажка, которые я хочу связать двумя способами: привязка данных к Login-Component-TypeScript.
Это HTML:
<div class="checkbox">
<label>
<input #saveUsername [(ngModel)]="saveUsername.selected" type="checkbox" data-toggle="toggle">Save username
</label>
</div>
И это 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']);
}
Если я нажимаю флажок, я получаю правильное значение в контроллере (компонент).
Но если я изменю значение, например, saveUsername
в компоненте, флажок не «получит» новое значение.
Поэтому я не могу манипулировать флажком из Компонента (как я хочу сделать ngOnInit
в компоненте.
Спасибо за вашу помощь!
Ответы:
Вы можете удалить
.selected
изsaveUsername
своего флажка вход, так как saveUsername является логическим значением. Вместо[(ngModel)]
использования[checked]="saveUsername" (change)="saveUsername = !saveUsername"
Изменить: правильное решение:
Обновление: как @newman заметил, когда
ngModel
используется в форме, он не будет работать. Однако вы должны использовать[ngModelOptions]
атрибут like (протестировано в Angular 7):Я также создал пример в Stackblitz: https://stackblitz.com/edit/angular-abelrm
источник
$scope.loginData = {}; $scope.loginData.username = window.localStorage.getItem("username");
и это в шаблоне:<ion-toggle ng-model="saveUsername" ng-change="toggleSaveUsername()" toggle-class="toggle-energized">Benutzername speichern</ion-toggle>
[(ngModel)]="saveUsername"
не работает, но этот работает. Это должно быть ошибка в угловой?ngModel
используется в форме, это не будет работать.[ngModelOptions]="{standalone: true}"
это то, что мне нужноК сожалению , решение , предоставляемое @hakani не двухстороннее связывание . Это только обрабатывает одностороннюю изменяющуюся модель от UI / FrontEnd.
Вместо простого:
сделает двустороннее связывание для флажка.
Впоследствии, когда модель checkboxFlag изменяется с Backend или части пользовательского интерфейса - вуаля, checkboxFlag сохраняет фактическое состояние флажка.
Чтобы быть уверенным, я подготовил код Плункера, чтобы представить результат: https://plnkr.co/edit/OdEAPWRoqaj0T6Yp0Mfk
Просто чтобы завершить этот ответ, вы должны включить
import { FormsModule } from '@angular/forms'
вapp.module.ts
и добавить в массив импорта, т.е.источник
ngFor
, повторяя массив объектов, таких как[{"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" />
Я работаю с Angular5, и мне пришлось добавить атрибут «name», чтобы привязка работала ... «id» не требуется для привязки.
источник
Я предпочитаю что-то более явное:
component.html
component.ts
источник
8.2.11
.При использовании
<abc [(bar)]="foo"/>
синтаксиса на угловых.Это переводится как:
<abc [bar]="foo" (barChange)="foo = $event" />
Что означает, что ваш компонент должен иметь:
источник
Вы можете просто использовать что-то вроде этого для двухстороннего связывания данных:
источник
Чтобы установить флажок, вы должны выполнить все эти шаги:
FormsModule
в ваш модульform
тегаВаш вклад должен быть таким:
Примечание: не забудьте указать имя в поле ввода.
источник
Вы должны добавить
name="selected"
атрибут кinput
элементу.Например:
источник
Я сделал пользовательский компонент попробовал двухстороннее связывание
MyComponent:
<input type="checkbox" [(ngModel)]="model" >
странная вещь, это работает
пока это не
источник
В любой ситуации, если вам нужно связать значение с флажком, который не является логическим, то вы можете попробовать следующие параметры
В HTML-файл:
в компоненте
ischeckedWithOutBoolean: any = 'Y';
Смотрите в стеке https://stackblitz.com/edit/angular-5szclb?embed=1&file=src/app/app.component.html
источник
Я знаю, что это может быть повторный ответ, но для любого, кто хочет загрузить список флажков с флажком selectall в угловую форму, я следую этому примеру: выберите все / снимите флажок всех, используя угловой 2+
это работает нормально, но нужно просто добавить
окончательный HTML должен быть таким:
Машинопись
надеюсь, это поможет thnx
источник
Обходной путь для достижения того же самого, особенно если вы хотите использовать флажок с циклом for, состоит в том, чтобы сохранить состояние флажка внутри массива и изменить его на основе индекса
*ngFor
цикла. Таким образом, вы можете изменить состояние флажка в вашем компоненте.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
источник
Моя угловая директива, такая как angularjs (ng-true-value ng-false-value)
HTML
источник
В угловых p-флажок,
Использовать все атрибуты p-checkbox
И что еще более важно, не забудьте включить,
[ngModelOptions]="{standalone: true}
а также сохранить мой день.источник
.html файл
файл .ts
источник