1.普通v-model實現雙向綁定的使用
<input type="text" v-model="message">
vue在解釋v-model的時候會做一個轉化工作,實質是下面這樣:
<div id="app">
<input type="text" :value="message" @input="message = $event.target.value">
<span>{{message}}</span>
</div>
<script>
var app2 = new Vue({
el:'#app',
data:{
message:"Hello Vue"
}
});
</script>
2.封裝組件標簽上使用v-model完成雙向綁定
仿照v-model的實現方法,在自定義組件標簽上實現v-model功能
子組件:
<template>
<div>
<!--1 el-下拉選擇框 -->
<el-select v-model="content" @change="handleInput" placeholder="請選擇">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"
:disabled="item.disabled">
</el-option>
</el-select>
<!--2 原生下拉框 -->
<!-- <select name="" id="" v-model="content" @change="handleInput">
<option value="11">11</option>
<option value="22">22</option>
<option value="33">33</option>
</select> -->
<!--3 el-輸入框 -->
<!-- <el-input v-model="content" @input="handleInput" placeholder="請輸入內容"></el-input> -->
<!--4 原生輸入框 -->
<!-- <input v-model="content" @input="handleInput" /> -->
</div>
</template>
<script>
export default {
name: "HelloWorld",
prop: ['newValue'],
model: {
event: 'input-change',
prop: 'newValue'
},
data() {
return {
options: [{
value: '選項1',
label: '黃金糕'
}, {
value: '選項2',
label: '雙皮奶',
disabled: true
}, {
value: '選項3',
label: '蚵仔煎'
}, {
value: '選項4',
label: '龍須面'
}, {
value: '選項5',
label: '北京烤鴨'
}],
content: this.newValue
}
},
methods: {
handleInput(e) {
this.$emit('input-change', this.content)
}
}
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
父組件調用
<HelloWorld v-model="name" />更新了:{{ name }}
data(){
return{
name:'',
}
}
結果
原生html 和element框架里的組件都可以實現
我是馬丁的車夫,歡迎轉發收藏!
