vue中組件傳參的幾種方法

慈雲數據 1年前 (2024-04-01) 技術支持 51 0

1.父子組件

  1. Props:通過在父組件中定義props屬性,将數據傳遞給子組件。子組件通過props屬性接收數據。例如:
Python
// 父組件

  


import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello World!'
    }
  }
}

// 子組件

  {{ message }}


export default {
  props: {
    message: String
  }
}

  1. $emit:通過在子組件中觸發事件,将數據傳遞給父組件。父組件通過在子組件上監聽事件,接收數據。例如:
Python
// 子組件

  Send Message


export default {
  methods: {
    sendMessage() {
      this.$emit('message-sent', 'Hello World!')
    }
  }
}

// 父組件

  


import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  methods: {
    handleMessage(message) {
      console.log(message) // 'Hello World!'
    }
  }
}

  1. Provide/Inject:通過在父組件中提供數據,讓子孫組件可以注入數據。例如:
Python
// 父組件

  
    
      
    
  


import ProvideMessage from './ProvideMessage.vue'
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ProvideMessage,
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello World!'
    }
  }
}

// ProvideMessage組件

  
    
  


export default {
  provide() {
    return {
      message: this.message
    }
  },
  props: {
    message: String
  }
}

// 子組件

  {{ message }}


export default {
  inject: ['message']
}

以上是Vue中組件傳參的三種常用方法,分别是Props、$emit和Provide/Inject。通過這些方法,我們可以在組件之間傳遞數據,實現組件之間的通信

vue中組件傳參的幾種方法
(圖片來源網絡,侵删)

2.兄弟組件

  1. 通過共同的父組件傳遞數據:如果兩個兄弟組件有共同的父組件,可以通過在父組件中定義數據,然後通過props屬性分别傳遞給兩個兄弟組件。例如:
Python
// 父組件

  
    
    
  


import ChildComponent1 from './ChildComponent1.vue'
import ChildComponent2 from './ChildComponent2.vue'
export default {
  components: {
    ChildComponent1,
    ChildComponent2
  },
  data() {
    return {
      hello: 'Hello',
      world: 'World'
    }
  }
}

// ChildComponent1組件

  {{ message }}!


export default {
  props: {
    message: String
  }
}

// ChildComponent2組件

  {{ message }}!


export default {
  props: {
    message: String
  }
}

  1. 通過事件總線傳遞數據:可以在Vue實例中創建一個事件總線,然後在兄弟組件中分别觸發和監聽事件,從而實現數據傳遞。例如:
Python
// Vue實例

export default {
  data() {
    return {
      message: ''
    }
  },
  created() {
    this.$on('message-sent', (message) => {
      this.message = message
    })
  }
}

// ChildComponent1組件

  Send Message


export default {
  methods: {
    sendMessage() {
      this.$root.$emit('message-sent', 'Hello')
    }
  }
}

// ChildComponent2組件

  {{ message }} World!


export default {
  computed: {
    message() {
      return this.$root.message
    }
  }
}

  1. 通過Vuex狀态管理傳遞數據:可以使用Vuex來管理應用程序的狀态,從而實現兄弟組件之間的數據傳遞。例如:
Python
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, message) {
      state.message = message
    }
  }
})
// ChildComponent1組件

  Send Message


export default {
  methods: {
    sendMessage() {
      this.$store.commit('setMessage', 'Hello')
    }
  }
}

// ChildComponent2組件

  {{ message }} World!


export default {
  computed: {
    message() {
      return this.$store.state.message
    }
  }
}

以上是Vue中兄弟組件傳參的三種常用方法,分别是通過共同的父組件傳遞數據、通過事件總線傳遞數據和通過Vuex狀态管理傳遞數據。根據具體的場景和需求,選擇合适的方法來實現兄弟組件之間的數據傳遞。

3.祖先後代

  1. 通過props和 e m i t 傳遞數據:祖先組件可以通過 p r o p s 屬性将數據傳遞給中間組件,中間組件再通過 p r o p s 屬性将數據傳遞給後代組件。後代組件可以通過 emit傳遞數據:祖先組件可以通過props屬性将數據傳遞給中間組件,中間組件再通過props屬性将數據傳遞給後代組件。後代組件可以通過 emit傳遞數據:祖先組件可以通過props屬性将數據傳遞給中間組件,中間組件再通過props屬性将數據傳遞給後代組件。後代組件可以通過emit事件将數據傳遞回祖先組件。例如:
Python
// 祖先組件

  
    
  


import MiddleComponent from './MiddleComponent.vue'
export default {
  components: {
    MiddleComponent
  },
  data() {
    return {
      hello: 'Hello'
    }
  }
}

// 中間組件

  
    
  


import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  props: {
    message: String
  },
  methods: {
    sendMessage(message) {
      this.$emit('message-sent', message)
    }
  }
}

// 後代組件

  {{ message }} World!


export default {
  props: {
    message: String
  }
}

  1. 通過provide和inject傳遞數據:祖先組件可以通過provide方法提供數據,後代組件可以通過inject方法注入數據。例如:
Python
// 祖先組件

  
    
      
    
  


import MiddleComponent from './MiddleComponent.vue'
export default {
  components: {
    MiddleComponent
  },
  provide() {
    return {
      message: 'Hello'
    }
  }
}

// 中間組件

  
    
  

// 後代組件

  {{ message }} World!


export default {
  inject: ['message']
}

  1. 通過Vuex狀态管理傳遞數據:祖先組件和後代組件都可以通過Vuex來管理應用程序的狀态,從而實現數據傳遞。例如:
Python
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    message: 'Hello'
  },
  mutations: {
    setMessage(state, message) {
      state.message = message
    }
  }
})
// 祖先組件

  
    
      
    
  


import MiddleComponent from './MiddleComponent.vue'
export default {
  components: {
    MiddleComponent
  }
}

// 中間組件

  
    
  

// 後代組件

  {{ message }} World!


export default {
  computed: {
    message() {
      return this.$store.state.message
    }
  }
}

以上是Vue中祖先組件和後代組件傳遞數據的三種常用方法,分别是通過props和$emit傳遞數據、通過provide和inject傳遞數據和通過Vuex狀态管理傳遞數據。根據具體的場景和需求,選擇合适的方法來實現祖先組件和後代組件之間的數據傳遞。

vue中組件傳參的幾種方法
(圖片來源網絡,侵删)

4.參數傳遞和插槽之間的聯系

在Vue中,傳參和插槽是兩個不同的概念,但它們之間有一定的關系。

傳參是指在組件之間傳遞數據,可以通過props和$emit、provide和inject、Vuex等方式實現。傳參的目的是讓組件之間可以共享數據,從而實現組件之間的通信。

插槽是指在組件中定義一個或多個插槽,然後在使用該組件時,可以在插槽中插入任意内容。插槽的目的是讓組件更加靈活,可以根據使用場景動态地插入不同的内容。

傳參和插槽之間的關系在于,傳參可以用來控制插槽中的内容。例如,可以通過props屬性将數據傳遞給子組件,在子組件中使用插槽來展示這些數據。又例如,可以通過$emit事件将子組件中的數據傳遞給父組件,在父組件中使用插槽來展示這些數據。

下面是一個示例,演示了如何通過傳參和插槽來控制組件中的内容:

Python
// 父組件

  
    
      
        {{ message }} World!
      
    
  


import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello'
    }
  }
}

// 子組件

  
    
  


export default {
  props: {
    message: String
  },
  data() {
    return {
      message: this.message
    }
  }
}

在上面的示例中,父組件通過props屬性将數據傳遞給子組件,子組件通過插槽将數據傳遞給父組件。具體來說,父組件将數據hello傳遞給子組件,子組件将數據message傳遞給插槽,父組件通過插槽接收數據并展示在頁面上。

總之,傳參和插槽是兩個不同的概念,但它們之間有一定的關系。傳參可以用來控制插槽中的内容,從而實現組件之間的通信和動态渲染。

微信掃一掃加客服

微信掃一掃加客服