作为组件输入的 Angular2 传递函数不起作用
Angular2 passing function as component input is not working
我有一个将函数作为输入的组件。我已经从 parent.
传递了这个函数
虽然调用了该函数,但该函数无法访问声明该函数的实例的依赖项。
这是组件
@Component({
selector: 'custom-element',
template: `
{{val}}
`
})
export class CustomElement {
@Input() valFn: () => string;
get val(): string {
return this.valFn();
}
}
组件的使用方法如下
@Injectable()
export class CustomService {
getVal(): string {
return 'Hello world';
}
}
@Component({
selector: 'my-app',
template: `
<custom-element [valFn]="customVal"></custom-element>
`,
})
export class App {
constructor(private service: CustomService) {
}
customVal(): string {
return this.service.getVal();
}
}
当我 运行 这个应用程序时,我在控制台中收到一条错误消息 Cannot read property 'getVal' of undefined
这是问题的解决方案。
如果你传递方法,你需要.bind(this)
:
<custom-element [valFn]="customVal.bind(this)"></custom-element>
或
export class App {
constructor(private service: CustomService) {
}
customVal(): string {
return this.service.getVal();
}
customValFn = this.customVal.bind(this);
}
与
<custom-element [valFn]="customValFn"></custom-element>
您可以通过类似的方式传递 get/set 属性 而不是函数:
在您看来的某处:
<input type="text" [(ngModel)]="yourprop">
在您的组件文件中:
@Component({
selector: 'myapp',
templateUrl: './myapp.component.html',
styleUrls: ['./myapp.component.scss']
})
export class App {
constructor() { }
yourprop: any;
get yourprop(): any {
return this.scheduleEndDate;
};
//set accessor including call the onchange callback
set yourprop(v: any) {
// TODO do something else
// You can do whatever you want just like you have passed a function
if (v !== this.scheduleEndDate) {
this.scheduleEndDate = v;
}
}
}
更多信息@https://almerosteyn.com/2016/04/linkup-custom-control-to-ngcontrol-ngmodel
我有一个将函数作为输入的组件。我已经从 parent.
传递了这个函数虽然调用了该函数,但该函数无法访问声明该函数的实例的依赖项。
这是组件
@Component({
selector: 'custom-element',
template: `
{{val}}
`
})
export class CustomElement {
@Input() valFn: () => string;
get val(): string {
return this.valFn();
}
}
组件的使用方法如下
@Injectable()
export class CustomService {
getVal(): string {
return 'Hello world';
}
}
@Component({
selector: 'my-app',
template: `
<custom-element [valFn]="customVal"></custom-element>
`,
})
export class App {
constructor(private service: CustomService) {
}
customVal(): string {
return this.service.getVal();
}
}
当我 运行 这个应用程序时,我在控制台中收到一条错误消息 Cannot read property 'getVal' of undefined
这是问题的解决方案。
如果你传递方法,你需要.bind(this)
:
<custom-element [valFn]="customVal.bind(this)"></custom-element>
或
export class App {
constructor(private service: CustomService) {
}
customVal(): string {
return this.service.getVal();
}
customValFn = this.customVal.bind(this);
}
与
<custom-element [valFn]="customValFn"></custom-element>
您可以通过类似的方式传递 get/set 属性 而不是函数:
在您看来的某处:
<input type="text" [(ngModel)]="yourprop">
在您的组件文件中:
@Component({
selector: 'myapp',
templateUrl: './myapp.component.html',
styleUrls: ['./myapp.component.scss']
})
export class App {
constructor() { }
yourprop: any;
get yourprop(): any {
return this.scheduleEndDate;
};
//set accessor including call the onchange callback
set yourprop(v: any) {
// TODO do something else
// You can do whatever you want just like you have passed a function
if (v !== this.scheduleEndDate) {
this.scheduleEndDate = v;
}
}
}
更多信息@https://almerosteyn.com/2016/04/linkup-custom-control-to-ngcontrol-ngmodel