Angular Material 滑动切换不改变绑定变量
Angular Material Slide Toggle not changing bound variable
我有两个奇怪的问题。我有一个包含大量输入字段的大表单。那很好用。我想在底部添加一个滑动开关,它会更改一个会影响整个表单样式的变量。
我的第一个问题是在单击滑动开关之前变量不会显示。
HTML
<mat-slide-toggle [(ngModel)]="ifPrint" name="ifPrint" id="ifPrint" ></mat-slide-toggle>
<div>
{{ifPrint}}
</div>
组件
export class PrintReviewDetailsComponent implements OnInit {
ifPrint = true;
}
ifPrint 变量在页面加载时为空
第二个问题是
单击滑动开关时,包含变量的 div 显示为 true,但是当我单击开关到关闭位置时,ifPrint 变量保持为 true 并且不会改变。
我已经创建了一个 blitz,它使用相同的代码在那里工作正常,所以我不确定为什么我的页面上会出现这些问题。
控制台显示:
Error: No value accessor for form control with name: 'ifPrint'
编辑:我更新了 stackblitz 以包含表单的 html,但现在它不起作用。
我删除了模板中除 mat-slide-toggle
之外的所有内容,它按预期工作。
我认为问题是因为您的 html 模板正在引用您的组件没有的方法或属性,或者试图访问 null
或 [=12 的 属性 =] 某个地方导致了这个问题。
检查您的控制台是否存在错误,如果您修复了这些错误,滑动开关应该会按预期工作。
您的 updated stackblitz 无法重现您分享的问题...但是根据您的问题,以下 2 个问题针对表单得到解决,并且还完成了样式设置:
- 默认情况下不显示切换值,直到单击切换
- 切换时切换值没有改变
- 现在正在根据切换值更新样式
相关TS:
model:any;
constructor(){
this.model = {name: '' , age: null, ifPrint: false};
}
相关HTML:
<form (ngSubmit)="formSubmit()" #demoForm="ngForm" >
<div [ngClass]="model.ifPrint === true ? 'trueClass' : 'falseClass'">
<input type="text" placeholder="Enter Name" #name="ngModel" [(ngModel)]="model.name" name="name" />
<br/>
<input type="number" placeholder="Enter Age" #age="ngModel" [(ngModel)]="model.age" name="age" /> <br/>
<mat-slide-toggle #ifPrint #age="ngModel" [(ngModel)]="model.ifPrint" name="ifPrint"></mat-slide-toggle> {{model.ifPrint}} <br/>
</div>
<button type="submit"> Submit </button>
</form>
检查一个最小值,working demo here 了解您正在尝试的内容...希望对您有所帮助...
我有两个奇怪的问题。我有一个包含大量输入字段的大表单。那很好用。我想在底部添加一个滑动开关,它会更改一个会影响整个表单样式的变量。
我的第一个问题是在单击滑动开关之前变量不会显示。
HTML
<mat-slide-toggle [(ngModel)]="ifPrint" name="ifPrint" id="ifPrint" ></mat-slide-toggle>
<div>
{{ifPrint}}
</div>
组件
export class PrintReviewDetailsComponent implements OnInit {
ifPrint = true;
}
ifPrint 变量在页面加载时为空
第二个问题是
单击滑动开关时,包含变量的 div 显示为 true,但是当我单击开关到关闭位置时,ifPrint 变量保持为 true 并且不会改变。
我已经创建了一个 blitz,它使用相同的代码在那里工作正常,所以我不确定为什么我的页面上会出现这些问题。
控制台显示:
Error: No value accessor for form control with name: 'ifPrint'
编辑:我更新了 stackblitz 以包含表单的 html,但现在它不起作用。
我删除了模板中除 mat-slide-toggle
之外的所有内容,它按预期工作。
我认为问题是因为您的 html 模板正在引用您的组件没有的方法或属性,或者试图访问 null
或 [=12 的 属性 =] 某个地方导致了这个问题。
检查您的控制台是否存在错误,如果您修复了这些错误,滑动开关应该会按预期工作。
您的 updated stackblitz 无法重现您分享的问题...但是根据您的问题,以下 2 个问题针对表单得到解决,并且还完成了样式设置:
- 默认情况下不显示切换值,直到单击切换
- 切换时切换值没有改变
- 现在正在根据切换值更新样式
相关TS:
model:any;
constructor(){
this.model = {name: '' , age: null, ifPrint: false};
}
相关HTML:
<form (ngSubmit)="formSubmit()" #demoForm="ngForm" >
<div [ngClass]="model.ifPrint === true ? 'trueClass' : 'falseClass'">
<input type="text" placeholder="Enter Name" #name="ngModel" [(ngModel)]="model.name" name="name" />
<br/>
<input type="number" placeholder="Enter Age" #age="ngModel" [(ngModel)]="model.age" name="age" /> <br/>
<mat-slide-toggle #ifPrint #age="ngModel" [(ngModel)]="model.ifPrint" name="ifPrint"></mat-slide-toggle> {{model.ifPrint}} <br/>
</div>
<button type="submit"> Submit </button>
</form>
检查一个最小值,working demo here 了解您正在尝试的内容...希望对您有所帮助...