vue組件,自定義v-model方法


 

<my-component v-model="obj"></my-component>

  

在使用my-component組件時,為了實現雙向綁定。

 

Vue.component('my-component', {
	props: {
		obj: Object,
	},
	model: {
		prop: 'obj',
		event: 'change'
	},
	methods: {
		onchange: function() {
			this.$emit('change', this.obj);
		}
	}
});

  

上面代碼中

1.props對象中,需要定義一個能夠從外部傳入的變量,這里我定義了一個obj。這樣就可以用下面這行代碼進行傳遞值

<my-component :obj="obj對象"></my-component>

  

2.為了能夠使用v-model語法糖,我們定義了model對象。model對象包含兩個屬性,一個是prop,一個是event。prop默認是value,event默認是input,我們這里寫model是為了改變默認的東西,使用我們自己定義的變量。寫好之后就可以用下面這行代碼了。

<my-component v-model="obj對象"></my-component>

  

3.雖然可以這么用,但還是不能從子組件傳遞數據到外部。因為change事件並沒有被觸發。這個change事件是我自定義的,所以這里需要寫一個方法onchange。方法名是次要的,主要的是里面的那行代碼。

this.$emit('change', this.obj);

  

這行兩個參數,第一個是事件名,和model里的event屬性的值要一樣。第二個參數是改變的值。寫第二個變量,才能改變外部的數據,實現雙向綁定的功能。

 

文筆不行,沒辦法表達出清晰的思路,貼上早上翻閱的一些有用的鏈接,以供參考。

 

參考:

https://jsfiddle.net/yyx990803/58kxs8tj/ 

https://github.com/vuejs/vue/issues/4373

http://lizhihua.me/2016/10/31/vue/component_v-model/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM