传递组件名称变量调用data.add方法失效,求技术指导
解决变量调用组件方法的问题
我太懂这种踩坑的感觉了!之前也试过直接拿字符串变量当组件名调用方法,结果完全行不通——其实核心问题很简单:你手里的grid_target只是个字符串,不是组件实例的实际引用,咱们来把它搞定:
核心原理
JavaScript里访问对象属性有两种方式,这正是问题的关键:
- 点语法(
.):只能用字面量属性名,比如grid_GroupA.data,这就是你硬编码能成功的原因 - 方括号语法(
[]):可以用变量指定属性名,这刚好能解决你的需求!
具体解决方案
根据你的组件实例存储位置,选对应的方法就行:
1. 如果组件是全局变量(挂载在window上)
要是你的grid_GroupA是全局可用的,直接通过window对象用方括号访问:
function msg_max(newItem, grid_target) { console.log(grid_target); // 这行就和硬编码的grid_GroupA.data.add(newItem)完全等效了 window[grid_target].data.add(newItem); }
2. 如果是在Vue/React这类框架中(用refs存储组件)
比如Vue里你给组件加了ref="grid_GroupA",组件实例会存在this.$refs里,用方括号访问即可:
// 注意:如果是Vue组件内的方法,要确保this指向正确 function msg_max(newItem, grid_target) { this.$refs[grid_target].data.add(newItem); }
3. 自定义存储组件实例(更推荐,避免全局污染)
把所有grid组件实例统一存到一个对象里,管理起来更可控:
// 先提前把组件实例存好 const gridInstances = { grid_GroupA: 你的Grid组件实例, grid_GroupB: 另一个Grid组件实例 }; function msg_max(newItem, grid_target) { gridInstances[grid_target].data.add(newItem); }
为啥你之前的尝试都无效?
你之前写的grid_target.data.add(...),本质是把字符串"grid_GroupA"当成对象去访问data属性——但字符串本身根本没有data这个属性呀,自然会失败!
内容的提问来源于stack exchange,提问作者Neil_Tinkerer
相关产品推荐
相关产品推荐

