1. 程式人生 > 其它 >vue父子元件傳參的4種方式

vue父子元件傳參的4種方式

技術標籤:vuevuevue 父子元件傳參

父元件向子元件傳參

父元件直接繫結在子元件的標籤上,子元件通過props接收傳遞過來的引數。

父元件

<template>
	<i-activities-item
	    :content="content"
	/>
</template>

<script>
import ActivityItem from '@/components/activity-item/activity-item';
export default {
  name: 'NewsCenterListPaging'
, components: { 'i-activities-item': ActivityItem, }, data() { return { content: 'text', }; }, }; </script>

子元件

<template>
	<div>{{ content }}</div>
</template>

<script>
export default {
  name: '',

  props: {
    content: {
    	// 定義接收的型別 還可以定義多種型別 [String, Undefined, Number]
// 如果required為true,儘量type允許undefined型別,因為傳遞過來的引數是非同步的。或者設定預設值。 type: String, // 定義是否必須傳 required: true, // 定義預設值 default: '暫無' }, }, data() { return {}; }, }; </script>

父元件主動獲取所有的引數和方法(子元件被動傳參)

父元件

<template>
	<i-bind-phone ref="phoneRef" :phone="phone"
/> </template> <script> import PhonePopup from '@/views/personal-center/system-setting/componets/bind-phone'; export default { components: { 'i-bind-phone': PhonePopup, }, data() { return { phone: null, }, }, methods: { // 點選檢視手機繫結 onClickChangePhone() { // 父元件呼叫子元件中的showPhone方法 this.$refs.phoneRef.showPhone(); console.log(this.$refs.phoneRef.visible) }, }, }; </script>

子元件

<template>
	<div v-if="visible">
		....
	</div>
</template>

<script>
export default {
  data() {
    return {
      visible: false,
      },
  },
  methods: {
    showPhone() {
      this.visible = true
    },
  },
};
</script>

子元件(主動)向父元件傳參
方式一
子元件接收一個父元件傳遞過來的方法,將要傳遞給父元件的引數作為該方法的引數使用。

父元件

<template>
	<i-activities-item
	    :content="content"
	    :callback="onCallback"
	/>
</template>

<script>
import ActivityItem from '@/components/activity-item/activity-item';
export default {
  name: 'NewsCenterListPaging',

  components: {
    'i-activities-item': ActivityItem,
  },
  data() {
    return {
      content: 'text',
      childValue: ''
    };
  },
  methods: {
   // childrenData就是子元件傳遞過來的引數
	onCallback(childrenData) {
		console.log(childrenData)
		this.childValue = childrenData
	}
  }
};
</script>

子元件

<template>
	<div>{{ content }}</div>
	<button @clcik="onClick">點選傳遞向父元件傳參</button>
</template>

<script>
export default {
  name: '',

  props: {
    content: {
    	// 定義接收的型別 還可以定義多種型別 [String, Undefined, Number]
    	// 如果required為true,儘量type允許undefined型別,因為傳遞過來的引數是非同步的。或者設定預設值。
		type: String,
		// 定義是否必須傳
		required: true,
		// 定義預設值
		default: '暫無'
	},
	callback: {
		type: Function
	}
  },
  data() {
    return {
		dataValue: 123
	};
  },
  methods: {
	onClick() {
		this.callback(dataValue)
	}
	}
};
</script>

當然還有最常見一種$emit