Lon*_*ike 3 javascript events vue.js
Vue.component('rating-edit', {
template:`
<form>
<input v-model="rating.title" type="text">
<textarea v-model="rating.remark">{{rating.remark}}</textarea>
<button type="button"
@click="submit">
Save
</button>
</form>`,
props:['rating'],
methods: {
submit: function submit () {
let rating = this.rating;
this.$emit('submit', rating);
console.log('submit was emitted');
}
}
});
const aRating = {
title: 'title',
remark: 'remark'
};
let vueApp = new Vue({
el: '#rating-edit-container',
data: {
rating: aRating
}
});
vueApp.$on('submit', function(rating) {
console.log('vue on submit', rating);
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://vuejs.org/js/vue.min.js"></script>
<div id="rating-edit-container">
<rating-edit :rating="rating"></rating-edit>
</div>
Run Code Online (Sandbox Code Playgroud)
在旧版前端代码中,我想实现基于vue的组件化表单,并使其在提交时返回数据。
这是组件代码。请注意提交功能触发this.$emit('submit', rating);
let result = {
props:['rating'],
methods: {
submit: function submit () {
let rating = this.rating;
this.$emit('submit', rating);
console.log('submit fired');
}
}
};
export default result;
Run Code Online (Sandbox Code Playgroud)
现在,在旧版代码中,我正在等待事件:
import Vue from 'vue';
import ratingEditVue from './rating-edit.vue';
Vue.component('rating-edit', ratingEditVue);
const aRating = {
title: 'title',
remark: 'remark'
};
let vueApp = new Vue({
el: '#rating-edit-container',
data: {
rating: aRating
}
});
vueApp.$on('submit', function(rating) {
console.log('vue on submit', rating);
});
Run Code Online (Sandbox Code Playgroud)
据我了解,Vue事件应该可以正常工作。但是$ on('submit',handlerFunction)永远不会被调用。
附录:
我摆弄了这个例子。抱歉,我没有这样做。
问题是您沿rating-edit
组件的相同作用域深度发射。
如果您改为使用发出给父对象this.$parent.$emit
,则该事件将被父对象接收。请注意,如果您需要在多个地方或多个深度执行此操作,则想改用事件总线。
Vue.component('rating-edit', {
template:`
<form>
<input v-model="rating.title" type="text">
<textarea v-model="rating.remark">{{rating.remark}}</textarea>
<button type="button"
@click="submit">
Save
</button>
</form>`,
props:['rating'],
methods: {
submit: function submit () {
let rating = this.rating;
this.$parent.$emit('submit', rating);
console.log('submit was emitted');
}
}
});
const aRating = {
title: 'title',
remark: 'remark'
};
let vueApp = new Vue({
el: '#rating-edit-container',
data: {
rating: aRating
}
});
vueApp.$on('submit', function(rating) {
console.log('vue on submit', rating);
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://vuejs.org/js/vue.min.js"></script>
<div id="rating-edit-container">
<rating-edit :rating="rating"></rating-edit>
</div>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4689 次 |
最近记录: |