前端框架vue組件通信

前端框架vue組件通信


vue組件之間的通

14

前言

作為一個vue初學者不得不瞭解的就是組件間的數據通信(暫且不談vuex)。通信方式根據組件之間的關係有不同之處。組件關係有下面三種:父-->子子-->父非父子

父-->子

父向子傳遞數據通過props

**父組件代碼**

<template>

<header-box>

import Header from

'./header'

export default {

name: 'index',

components: {

'header-box': Header

},

data () {

return {

showTitleTxt: '首頁'

}

}

}

**子組件代碼**

<template>

<header>

{{thisTitleTxt}}

export default {

name: 'header-box',

props: {

titleTxt: String

},

data () {

return {

thisTitleTxt: this.titleTxt

}

}

}

子-->父

子組件向父組件傳遞分為兩種類型。

1、子組件改變父組件傳遞的props(你會發現通過props中的Object類型參數傳輸數據,可以通過子組件改變數據內容。這種方式是可行的,但是不推薦使用,因為官方定義prop是單向綁定)

2、通過$on和$emit

*通過props實現傳遞*

**父組件代碼**

<template>

<header-box>

import Header from './header'

export default {

name: 'index',

components: {

'header-box': Header

},

data () {

return {

showTitleTxt: {

name: '首頁'

}

}

}

}

**子組件代碼**

<template>

<header>

{{thisTitleTxt.name}}

export default {

name: 'header-box',

props: {

titleTxt: Object

},

data () {

return {

thisTitleTxt: this.titleTxt.name

}

},

metheds: {

changeTitleTxt () {

this.titleTxt.name = '切換'

}

}

}

*通過$on,$emit*

**父組件代碼**

<template>

{{ total }}

<button-counter>

**子組件代碼**

<template>

<button>{{counter}}/<button>

export default {

name: 'button-counter',

data () {

return {

counter: 0

}

},

metheds: {

incrementCounter () {

this.$emit('increment')

this.counter++

}

}

}

非父子

簡單情況下我們可以通過使用一個空的Vue實例作為中央事件總線

**main.js**

let bus = new Vue()

Vue.prototype.bus = bus

**header組件**

<template>

<header>{{title}}/<header>

**footer組件**

<template>

<footer>{{txt}}/<footer>


分享到:


相關文章: