angular - 如何将 [checked] 与 precheck 和 ngModel 结合起来同时与函数绑定?
问题描述
所以我有两个可观察的承诺数组,技能是用 ngFor 填充复选框,另一个是如果能力对象在技能中,则检查页面加载时的复选框。之后我还有一个功能,该功能取决于检查的技能将添加到数据库中。在存在 [(ngModel)] 的情况下 [checked] 不起作用。我不知道如何将它们组合在一起,请帮助。
能力.component.html
<ion-card-content>
<div id ="research">
<ion-searchbar placeholder="Ex: Piano" [(ngModel)]="search" type="text" maxlength="20"></ion-searchbar>
</div>
<ion-item *ngFor="let skill of skills | filter:search">
<div>
<ion-label>{{skill.title}}</ion-label>
<ion-label>{{skill.type}}</ion-label>
</div>
<ion-checkbox slot="start" [checked]="isInArray(skill)" [(ngModel)]="skill.checked" (ionChange)="onChange(skill)" ></ion-checkbox>
</ion-item>
</ion-card-content>
能力.component.ts
import {Component, OnInit} from '@angular/core';
import {SkillService} from '../../services/skill.service';
import {UserService} from '../../services/user.service';
@Component({
selector: 'app-competences',
templateUrl: './competences.component.html',
styleUrls: ['./competences.component.scss'],
})
export class CompetencesComponent implements OnInit {
skills = [];
search: string;
competences = [];
constructor(
private skillService: SkillService,
private userService: UserService) {
}
async ngOnInit() {
this.competences = await this.getCompetences();
this.skills = await this.getSkills();
}
isInArray(value) {
return this.competences.findIndex((val) => val.title === value.title) > -1;
}
getCompetences() {
return this.skillService.getUserCompetence(localStorage.getItem('userMail')).toPromise();
}
getSkills() {
return this.skillService.getSkills().toPromise();
}
onChange(skill) {
if (skill.checked == true) {
this.userService.addUserCompetence(localStorage.getItem('userMail'), skill.title).subscribe();
} else if (skill.checked == false) {
this.userService.deleteUserCompetence(localStorage.getItem('userMail'), skill.title).subscribe();
}
}
}
解决方案
编辑:我找到了解决方法
能力.component.html
<ion-card-content>
<div id ="research">
<ion-searchbar placeholder="Ex: Piano" [(ngModel)]="search" type="text" maxlength="20"></ion-searchbar>
</div>
<ion-item *ngFor="let skill of skills | filter:search">
<ion-label>{{skill.title}}</ion-label>
<ion-label>{{skill.type}}</ion-label>
<ion-checkbox slot="start" [checked]="isInArray(skill)" [value]="skill" (ionChange)="onCheck(skill)" ></ion-checkbox>
</ion-item>
</ion-card-content>
能力.component.ts
import {Component, OnInit} from '@angular/core';
import {SkillService} from '../../services/skill.service';
import {UserService} from '../../services/user.service';
@Component({
selector: 'app-competences',
templateUrl: './competences.component.html',
styleUrls: ['./competences.component.scss'],
})
export class CompetencesComponent implements OnInit {
skills = [];
search: string;
competences = [];
checkedSkills = [];
constructor(
private skillService: SkillService,
private userService: UserService) {
}
async ngOnInit() {
this.competences = await this.getCompetences();
this.skills = await this.getSkills();
this.competences.forEach(skill => this.checkedSkills.push(skill));
console.log(this.checkedSkills);
}
isInArray(skill) {
return this.competences.findIndex((val) => val.title === skill.title) > -1;
}
getCompetences() {
return this.skillService.getUserCompetence(localStorage.getItem('userMail')).toPromise();
}
getSkills() {
return this.skillService.getSkills().toPromise();
}
onCheck(skill) {
if (!this.isInArray(skill)) {
this.checkedSkills.push(skill);
this.userService.addUserCompetence(localStorage.getItem('userMail'), skill.title).subscribe();
} else {
const index = this.checkedSkills.findIndex((val) => val.title === skill.title);
if (index > -1) {
this.checkedSkills.splice(index, 1);
this.userService.deleteUserCompetence(localStorage.getItem('userMail'), skill.title).subscribe();
}
}
console.log(this.checkedSkills);
}
}
推荐阅读
- image - xamarin 有时会通过 URL 形成图像而不在列表视图中显示图像
- highcharts - Highmap:触发悬停+在悬停气泡数据上显示国家的工具提示
- harmon.ie - 为什么我的 Outlook Harmon.ie 侧边栏分离?
- sql - 如何使用 SQL 为每个 MANAGER_ID 的每个员工添加剩余的工资
- electron - 电子窗口商店返回错误:未知选项`--flatten'
- c# - 如何从不是从 Controller 派生的类返回 ActionResult(文件)?
- java - 如何在 FragmentPagerAdapter 中的片段之间传递数据
- javascript - 如何用 react-native 绘制梯形/梯形?
- python - 我将如何处理以下问题?
- json - 此策略包含以下错误:已禁止字段 Principal