Angular组件mapper方法中类属性MAX_GLOBAL为何为undefined?
Angular中Kendo MultiSelect的tagMapper与open事件方法的this指向差异
核心差异在于方法的this上下文绑定逻辑不同:
对于
(open)="openFilter()"这类事件绑定:
Angular会自动将组件实例的上下文(this)绑定到调用的方法上,所以openFilter里的this始终指向组件类,能正常访问MAX_GLOBAL这类类属性。对于
[tagMapper]="mapper"这类输入属性绑定:
这种写法只是把mapper方法的引用传递给了Kendo组件。当Kendo内部调用该方法时,并没有自动绑定组件的this上下文,此时this的指向会变成调用它的上下文(严格模式下通常是undefined),所以访问this.MAX_GLOBAL会返回undefined。
解决办法
有两种常用方式修正mapper的this指向:
- 在组件构造函数中手动绑定
this:
constructor() { this.mapper = this.mapper.bind(this); }
- 用箭头函数定义
mapper,箭头函数会捕获当前组件的上下文:
mapper = (item) => { // 此处this正确指向组件实例,可正常访问MAX_GLOBAL // 编写你的标签映射逻辑 };
内容的提问来源于stack exchange,提问作者User051209
相关产品推荐
相关产品推荐

