【发布时间】:2019-11-23 23:53:47
【问题描述】:
我正在使用 Laravel 6(混合)+ Vue.js 2。
我正在创建一个多语言词典,用户可以在其中添加单词,并且他们可以为每个单词添加多个定义及其翻译。
内部index.blade.php
<div class="modal fade" id="modal-addItem">
<form>
<div class="card" v-for="(value, index) in nbDefinitions">
<div class="card-header">@{{ value }}.</div>
<div class="card-body">
<dl class="row">
<dt class="col-sm-3">English</dt>
<dd class="col-sm-9">
<autocomplete data-language="english" :search="searchDefinition" :get-result-value="getDefinitionResultValue" @submit="handleSearchDefinitionSubmit"></autocomplete>
</dd>
<dt class="col-sm-3">French</dt>
<dd class="col-sm-9">
<autocomplete data-language="french" :search="searchDefinition" :get-result-value="getDefinitionResultValue" @submit="handleSearchDefinitionSubmit"></autocomplete>
</dd>
</dl>
</div>
</div>
<div class="row">
<button type="button" class="btn btn-primary" id="addItems-addDefinition" @click="addDefinition">+ Add definition</button>
</div>
</form>
</div>
内部myCustom.js
new Vue({
el: '#modal-addItem',
data: {
nbDefinitions: 0,
nbSentencesPerDef: [],
translatedDefinitions: []
},
methods: {
addDefinition: function() {
this.nbDefinitions++;
this.nbSentencesPerDef.push(1);
this.translatedDefinitions.push({
english: null,
french: null
});
},
searchDefinition: function (input) {
// How can I know which <autocomplete> is triggered?
return new Promise(resolve => {
if (input.length < 3) { return resolve([]); }
fetch(`/api/v1/definitions?search=${encodeURI(input)}`)
.then(response => response.json())
.then(responseJson => {
resolve(responseJson.definitions);
})
})
},
getDefinitionResultValue: function(result) {
// How can I know which <autocomplete> is triggered?
let definition = result.definition;
let item = result.item.name;
return `${item} - ${definition}`;
},
handleSearchDefinitionSubmit: function(result) {
// How can I know which <autocomplete> is triggered?
console.log(this);
}
}
});
我正在使用autocomplete,这是一个全局加载的外部组件(在 Laravel 主 app.js 中)https://autocomplete.trevoreyre.com/#/
我的问题是:我如何知道在“addDefinition”、“searchDefinition”和“handleSearchDefinitionSubmit”方法中被触发的子组件是什么?因为我的 Vue 对象中有 3 个自动完成组件,而 this 指的是根(在我的情况下是 html 模态),所以我不知道触发了哪个自动完成子项。 this.$refs 也是空的。
也许这是一个架构问题,但我没有足够的经验知道如何完成它。
【问题讨论】:
-
您是否对示例中显示的语言进行硬编码?如果是这样,您总是可以创建
searchEnglishDefinition、searchFrenchDefinition等调用 searchDefinition 像searchDefintion(input, 'english') -
或者 - 看看this issue - 这不是你要问的,但它可能会有所启发
标签: javascript laravel vue.js vuejs2 vue-component