Javascript 如何在父vue中触发组件?

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模式),所以我不知道触发了哪

我使用的是Laravel6(mix)+Vue.js2

我正在创建一个多语言词典,用户可以在其中添加单词,并且可以为每个单词添加多个定义及其翻译

内部
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}`);
        }