解决Chart.js工具提示回调中Angular Locale服务访问异常问题
问题解答
这确实是作用域问题
普通函数作为Chart.js的tooltip回调时,this的指向由调用上下文决定——这里Chart.js执行回调时,this指向的是工具提示实例,而非组件实例,所以访问this.locale会返回undefined。
两种可行的解决方法
方法一:用箭头函数绑定组件作用域
箭头函数不会创建独立的this,它会继承外层(组件)的this上下文,这样就能直接访问组件的this.locale:
// 组件内的Chart配置代码 const config: any = { options: { plugins: { tooltip: { callbacks: { label: (context) => { // 此处this指向组件实例,可正常访问this.locale // 编写你的标签处理逻辑 return `数值: ${context.parsed.y} (地区: ${this.locale})`; } } } } } };
方法二:将locale直接存入Chart配置对象
提前把组件的locale赋值到配置的自定义字段中,在回调里通过配置对象访问:
// 组件内代码 this.locale = this.localeService.getLocale(); // 从LocaleService获取locale const config: any = { // 自定义字段存储locale componentLocale: this.locale, options: { plugins: { tooltip: { callbacks: { label: function(context) { // 通过config对象访问预先存入的locale // 编写你的标签处理逻辑 return `数值: ${context.parsed.y} (地区: ${config.componentLocale})`; } } } } } };
此外,也可以通过bind(this)强制将回调的this绑定到组件实例,但箭头函数的写法在Angular项目中更简洁常用。
内容的提问来源于stack exchange,提问作者Mannan Bahelim
相关产品推荐
相关产品推荐

