<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{value}}
<wrapper v-on:focus="onFocus" v-bind:value="value" v-on:input="onFocus" placeholder="请输入"> </wrapper>
</div>
<script>
Vue.component("Wrapper", {
template: `
<div>
<son v-bind="$attrs" v-on="$listeners"></son>
</div>
`
});
Vue.component("son", {
template: `
<div>
<button @click="handleClick">333</button>
<input type="text" v-bind="$attrs" v-on="rewriteListener">
</div> `,
computed: {
rewriteListener() {
const vm = this;
return Object.assign({}, this.$listeners, {
input: function (event) {
vm.$emit("input", event.target.value)
}
})
}
},
methods:{
handleClick(){
console.log('handleClick')
}
}
})
new Vue({
el:'#app',
data:{
value:''
},
methods:{
onFocus(value){
console.log(value)
}
}
})