1. 程式人生 > >vue組件間的參數傳遞

vue組件間的參數傳遞

事件 數據 method 獲取 接收 兩個 nts poi ret

場景分析

在前端開發中,我們常常會運用到“組件庫”。在main入口中引入組件庫,就可以很輕松的在頁面中引入,並做一些基本的配置,如樣式,顏色等。只需要在引入的組件中寫入特定的屬性,就能夠定義。

舉例說明

例如:element-ui組件庫中使用switch開關,有個屬性active-color是設置“打開時”的背景色。change事件是觸發狀態的事件。

<el-switch
  v-model="value"
  :active-color="activecolor"
  @change="touchSwitch">
</el-switch>

<script>
  export default {
    data() {
      return {
        value: true,
        activecolor: '#13ce66'
      }
    },
    methods: {
      touchSwitch () {
        // 這裏入方法
      }
    }
  };
</script>

分析代碼

我們分析上面的代碼
首先我們可以看到active-color是將特定的數據傳給組件,也就是父傳子組件。
其次是@change雖然監聽的是改變事件,但是語法糖依然是$emit,什麽emit我們在以後的文章中會講到,就是“拋出事件”。

這就分為組件的最基本功能:

  • 數據進
  • 事件出

那組件的使用我們知道了,通過active-color傳入參數,通過@來接收事件。
所以,我們來探究一下組件的內部結構是什麽樣的?

我寫了一個小模型,是一個顯示標題的小按鈕,通過div包裹。

<!-- type-box.vue -->
<template>
  <div class="box" @click="ai_click(title)">{{title}}</div>
</template>

<script>
export default {
  name: 'type-box',
  props: {
    title: {
      type: String,
      default: () => ''
    }
  },
  methods: {
    ai_click (title) {
      this.$emit('ai_click', title)
    }
  }
}
</script>

<style scoped>
  .box{
    width: 250px;
    height: 100px;
    margin: 10px;
    border-radius: 10px;
    background-color: #3a8ee6;
    color: white;
    font-size: 25px;
    line-height: 100px;
    text-align: center;
    cursor: pointer;
  }
</style>

使用方法:

<!-- 父組件使用 -->
<template>
  <div>
    <type-box title="演示盒子" @ai_click=“touch”></type-box>
  </div>
</template>
<script>
import typeBox from './type-box'
export default {
  components: {
    typeBox
  },
  methods: {
    touch (data) {
      console.log(data)
    }
  }
}
</script>

分析組件

接收

通過props接收父組件傳遞過來的數據,通過工廠函數獲取一個默認值。

傳遞

通過this.$emit(‘ai_click‘, title)告訴父組件,我要傳遞一個事件,名字叫“ai_click”,請通過@ai_click接收一下,並且我將title的值返回父組件。

總結

所以今天分析vue組件的3大核心概念的其中兩個——屬性和事件。
這篇文章只分析到應用場景,也是最簡單的組件。希望後續能夠深入了解vue的組件概念:屬性、事件和插槽。

vue組件間的參數傳遞