Angular forly 5.10.3 自定义切换事件
Angular formly 5.10.3 custom toggle event on change
我有一个有效的自定义模板,在两个文本之间有一个离子切换。我怎样才能捕捉到变化事件?这是一个简化的代码示例:
自定义表单的想法:
import { Component } from '@angular/core';
import { FieldType } from '@ngx-formly/core';
@Component({
selector: 'formly-field-input',
template: `
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'"> {{ to.textBefore }} </p>
<ion-toggle
[checked]="to.checked"
[disabled]="to.disabled"
color="primary">
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''"> {{ to.textAfter }} </p>
</span>
`,
styleUrls: ['./toggle-2-labels.component.scss'],
})
export class toggle2LabelsComponent extends FieldType { }
添加到表单的输入:
{
key: 'exampleName',
type: 'toggle2Labels',
wrappers: ['acc-wrapper'],
templateOptions: {
disabled: true,
checked: false,
textBefore: 'something',
textAfter: 'something',
onChange: (field, value) => console.log('onChange'),
change: (field, $event) => {
console.log('change');
},
},
hooks: {
onInit: (field: FormlyFieldConfig) => {
//Other stuff
},
}
},
我试过 onChange 和 change 事件,但没有成功。我认为这可能是本身没有价值的问题,但我不知道如何将它添加到我的自定义切换中。也许任何一种获取 to.checked 之类的属性更改的方法都可以。有什么想法吗?
您需要的属性称为 ionChange。由于这是一个离子框架元素,简单地使用约定默认值并不能保证工作。
template: `
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'"> {{ to.textBefore }} </p>
<ion-toggle
(ionChange)="() => console.log('onChange')"
[checked]="to.checked"
[disabled]="to.disabled"
color="primary">
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''"> {{ to.textAfter }} </p>
</span>
`,
Html
文件
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'">{{ to.textBefore }}</p>
<ion-toggle
(ionChange)="changeToggle($event)"
[checked]="to.checked"
[disabled]="to.disabled"
color="primary"
>
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''">{{ to.textAfter }}</p>
</span>
ts
文件
public to = {
checked: false,
disabled: false,
textBefore: 'something',
textAfter: 'something'
};
changeToggle(event: any) {
console.log(event.value);
this.to.checked = event.value;
}
我终于明白了,形式 onChange
和 change
事件不适用于自定义输入(它们也不适用于形式指南示例)所以我的解决方案是自定义输入模板上的 (ionChange)
事件与示例中的 init 挂钩;
自定义形式:
import { Component } from '@angular/core';
import { FieldType } from '@ngx-formly/core';
@Component({
selector: 'formly-field-input',
template: `
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'"> {{ to.textBefore }} </p>
<ion-toggle
<ion-toggle
[formControl]="formControl"
[formlyAttributes]="field"
[value]="to.checked"
[checked]="to.checked"
[disabled]="to.disabled"
(ionChange)="formControl.setValue(to.checked)"
color="primary">
color="primary">
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''"> {{ to.textAfter }} </p>
</span>
`,
styleUrls: ['./toggle-2-labels.component.scss'],
})
export class toggle2LabelsComponent extends FieldType { }
自定义输入
{
key: 'exampleName',
type: 'toggle2Labels',
wrappers: ['acc-wrapper'],
templateOptions: {
disabled: true,
checked: false,
textBefore: 'something',
textAfter: 'something',
onChange: (field, value) => console.log('onChange'),
change: (field, $event) => {
console.log('change');
},
},
hooks: {
onInit: (field: FormlyFieldConfig) => {
field.formControl.valueChanges.subscribe(() => {
console.log('only works here for me');
});
},
}
},
我有一个有效的自定义模板,在两个文本之间有一个离子切换。我怎样才能捕捉到变化事件?这是一个简化的代码示例:
自定义表单的想法:
import { Component } from '@angular/core';
import { FieldType } from '@ngx-formly/core';
@Component({
selector: 'formly-field-input',
template: `
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'"> {{ to.textBefore }} </p>
<ion-toggle
[checked]="to.checked"
[disabled]="to.disabled"
color="primary">
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''"> {{ to.textAfter }} </p>
</span>
`,
styleUrls: ['./toggle-2-labels.component.scss'],
})
export class toggle2LabelsComponent extends FieldType { }
添加到表单的输入:
{
key: 'exampleName',
type: 'toggle2Labels',
wrappers: ['acc-wrapper'],
templateOptions: {
disabled: true,
checked: false,
textBefore: 'something',
textAfter: 'something',
onChange: (field, value) => console.log('onChange'),
change: (field, $event) => {
console.log('change');
},
},
hooks: {
onInit: (field: FormlyFieldConfig) => {
//Other stuff
},
}
},
我试过 onChange 和 change 事件,但没有成功。我认为这可能是本身没有价值的问题,但我不知道如何将它添加到我的自定义切换中。也许任何一种获取 to.checked 之类的属性更改的方法都可以。有什么想法吗?
您需要的属性称为 ionChange。由于这是一个离子框架元素,简单地使用约定默认值并不能保证工作。
template: `
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'"> {{ to.textBefore }} </p>
<ion-toggle
(ionChange)="() => console.log('onChange')"
[checked]="to.checked"
[disabled]="to.disabled"
color="primary">
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''"> {{ to.textAfter }} </p>
</span>
`,
Html
文件
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'">{{ to.textBefore }}</p>
<ion-toggle
(ionChange)="changeToggle($event)"
[checked]="to.checked"
[disabled]="to.disabled"
color="primary"
>
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''">{{ to.textAfter }}</p>
</span>
ts
文件
public to = {
checked: false,
disabled: false,
textBefore: 'something',
textAfter: 'something'
};
changeToggle(event: any) {
console.log(event.value);
this.to.checked = event.value;
}
我终于明白了,形式 onChange
和 change
事件不适用于自定义输入(它们也不适用于形式指南示例)所以我的解决方案是自定义输入模板上的 (ionChange)
事件与示例中的 init 挂钩;
自定义形式:
import { Component } from '@angular/core';
import { FieldType } from '@ngx-formly/core';
@Component({
selector: 'formly-field-input',
template: `
<span class="toggleContainer">
<p [class]="to.checked ? '' : 'toggleSelected'"> {{ to.textBefore }} </p>
<ion-toggle
<ion-toggle
[formControl]="formControl"
[formlyAttributes]="field"
[value]="to.checked"
[checked]="to.checked"
[disabled]="to.disabled"
(ionChange)="formControl.setValue(to.checked)"
color="primary">
color="primary">
</ion-toggle>
<p [class]="to.checked ? 'toggleSelected' : ''"> {{ to.textAfter }} </p>
</span>
`,
styleUrls: ['./toggle-2-labels.component.scss'],
})
export class toggle2LabelsComponent extends FieldType { }
自定义输入
{
key: 'exampleName',
type: 'toggle2Labels',
wrappers: ['acc-wrapper'],
templateOptions: {
disabled: true,
checked: false,
textBefore: 'something',
textAfter: 'something',
onChange: (field, value) => console.log('onChange'),
change: (field, $event) => {
console.log('change');
},
},
hooks: {
onInit: (field: FormlyFieldConfig) => {
field.formControl.valueChanges.subscribe(() => {
console.log('only works here for me');
});
},
}
},