Javascript 如何在父vue中触发组件?
我使用的是Laravel6(mix)+Vue.js2 我正在创建一个多语言词典,用户可以在其中添加单词,并且可以为每个单词添加多个定义及其翻译 内部Javascript 如何在父vue中触发组件?,javascript,laravel,vue.js,vuejs2,vue-component,Javascript,Laravel,Vue.js,Vuejs2,Vue Component,我使用的是Laravel6(mix)+Vue.js2 我正在创建一个多语言词典,用户可以在其中添加单词,并且可以为每个单词添加多个定义及其翻译 内部index.blade.php @{{value}}。 英语 我的问题是:我如何知道在方法“addDefinition”、“searchDefinition”和“handleSearchDefinitionSubmit”中触发的子组件是什么?因为我的Vue对象中有3个自动完成组件,这个引用根目录(在我的例子中是html模式),所以我不知道触发了哪
index.blade.php
@{{value}}。
英语
我的问题是:我如何知道在方法“addDefinition”、“searchDefinition”和“handleSearchDefinitionSubmit”中触发的子组件是什么?因为我的Vue对象中有3个自动完成组件,这个
引用根目录(在我的例子中是html模式),所以我不知道触发了哪个自动完成子目录。此外,$refs也是空的
也许这是一个架构问题,但我没有足够的经验知道如何完成它。组件本身并不直接支持这一点(例如,通过将自身作为函数的参数传递)。但幸运的是,对于作为道具传递的函数,我们可以使用名为“closure”的JS特性——而不仅仅是函数名,调用一个返回另一个函数的函数。对于事件,我们可以使用Vue的功能,允许我们在定义处理程序时访问特殊的“$event”值
像这样:
- 之前:
通过在组件数据中定义语言(['english',french']
)并使用v-for
生成每一行,可以进行更多的重构。您是否对示例中显示的语言进行了硬编码?如果是这样的话,你可以创建searchEnglishDefinition
,searchFrenchDefinition
等,它们调用searchDefinition,比如searchDefinition(输入,'english')
,或者-看看-这并不完全是你要问的,但它可能会让你有所了解
getSearchDefinitionFunc(lang) {
return input => this.searchDefinition(input, lang);
},
searchDefinition: function(input, lang) {
console.debug(`searchDefinition called with "${input}" and "${lang}"`);
if (input.length < 3) {
return Promise.resolve([]);
}
// ...don't create new Promise, just return an existing one
return fetch(`/api/v1/definitions?search=${encodeURI(input)}`)
.then(response => response.json())
.then(responseJson => responseJson.definitions);
},
handleSearchDefinitionSubmit: function(result, lang) {
console.log(`Submit: ${lang}`);
}