我创建了一个自定义Vue组件。
Vue.component('select2', {
props: ['apiurl', 'id', 'value'],
template: '#select2-template',
mounted: function(){
var vm = this
var apiURL = vm.$options.propsData['apiurl']
$(this.$el).select2({
placeholder: "Select an option",
allowClear: true,
templateResult: dropdownTemplate,
templateSelection: dropSelection,
ajax: {
url: function(params){
url = 'api/variable/' + apiURL
if(params.term) url = 'api/variable/' + apiURL + '/' + params.term
return url
}
}
})
.on('change', function(){
vm.$emit('input', this.value)
})
//Check if it has a value assigned
if (vm.$options.propsData['value'] && vm.$options.propsData['value'] != ''){
element = $(this.$el)
$.ajax({
type: 'GET',
url: 'path/' + apiURL + '/' + vm.$options.propsData['value']
}).then(function(data) {
var option = new Option(data.results[0].label, data.results[0].id, true, true)
element.append(option).trigger('change')
element.trigger({
type: 'select2:select',
params: {
data: data.results
},
templateResult: dropdownTemplate,
templateSelection: dropSelection
})
})
}
},
watch: {
value: function(value){
var apiURL = this.$options.propsData['apiurl']
var element = $(this.$el)
$.ajax({
type: 'GET',
url: 'path/' + apiURL + '/' + value
}).then(function(data) {
var option = new Option(data.results[0].label, data.results[0].id, true, true)
element.append(option).trigger('change')
element.trigger({
type: 'select2:select',
params: {
data: data.results
},
templateResult: dropdownTemplate,
templateSelection: dropSelection
})
})
},
doThis: function(){
console.log('b')
}
},
methods: {
doThis: function() {
console.log('a')
}
}
})我的组件正在按预期工作,但当我更改值时,我希望我的一些自定义组件能够执行某些功能。例如:
<select2 v-model="SomeModel" style="width: 125%;" apiurl="SomeModel" @change="doThis()">
</select2>并不是所有的自定义组件都会实现它,但是当选择了某些值时,我确实想要以某种方式进行操作。可以想象,我的自定义组件是一个Select2。@change不适用于我的自定义组件。
发布于 2020-05-12 16:33:24
每次需要调用@change时都会发出更改
.on('change', function(){
vm.$emit('input', this.value);
vm.$emit('change');
})组件不调用它并不重要。
https://stackoverflow.com/questions/61756848
复制相似问题