1. 程式人生 > >vue常用的元件傳參通訊方式

vue常用的元件傳參通訊方式

1.父元件傳值子元件

原理:父元件給子元件新增屬性,子元件通過props獲取屬性值,接收到父元件傳遞的引數;

案例如下:

父元件程式碼如下:

<template>
    <div>
        <!-- 父元件新增入參生成模組 -->
        父元件傳遞:<input type="text" v-model="value">
        <!-- 子元件定義傳遞引數屬性text -->
        <ChildA
            :text='value'>
        </ChildA>
    </div>
</template>
<script>
import ChildA from '../components/childA.vue';
export default {
    data(){
        return{
            value:''
        }
    },
    components:{
        ChildA,
    },
}
</script>

子元件程式碼如下:

<template>
    <div>
        接收父元件的值:{{text}}
    </div>
</template>
<script>
export default {
    data(){
        return{}
    },
    // 接收父元件屬性
    props:['text']
}
</script>

ps:在父元件定義text屬性並將引數通過該屬性傳遞至子元件ChildA,在子元件通過props接收text屬性並使用;

2.子元件傳值父元件

原理:子元件通過$emit派發,子元件通過props獲取屬性值,接收到父元件傳遞的引數;

案例如下:

子元件程式碼如下:

<template>
    <div>
        <!-- 子元件新增入參生成模組,監聽輸入框改變向父元件傳送資料“childChange”-->
        子元件傳遞:
        <input 
            type="text" 
            v-model="value"
            @input='childChange'>
    </div>
</template>
<script>
export default {
    data(){
        return{
            value:''
        }
    },
    methods:{
        childChange(){
            // 通過this.$emit向父元件傳送資料,資料放在“childChange”中
            this.$emit('childChange',this.value)
        }
    }
}
</script>

父元件程式碼如下:

<template>
    <div>
        父元件接收值:{{text}}
        <!-- 繫結“childChange”,添加回調“receive”接收引數 -->
        <ChildA
            @childChange='receive'>
        </ChildA>
        <p />
    </div>
</template>
<script>
import ChildA from '../components/childA.vue';
export default {
    data(){
        return{
            text:''
        }
    },
    components:{
        ChildA,
    },
    methods:{
        // 通過回撥函式入參獲取子元件傳遞的引數
        receive(value){
            this.text = value;
        }
    },
}
</script>

ps:在子元件定義方法通過this.$emit傳送資料,在父元件通過給子元件新增繫結事件,獲取子元件的引數並使用;

3.兄弟元件傳值

原理:引入中間控制元件,傳送資料元件通過$emit傳送資料,接收資料元件通過$on接收資料;

案例程式碼如下:

中間控制元件程式碼如下:

import Vue from 'Vue';
export default new Vue;

ps:建立一個vue例項並匯出,作為中間控制元件使用;

父元件程式碼如下:

<template>
    <div>
        <ChildA></ChildA>
        <childB></childB>
    </div>
</template>
<script>
import ChildA from '../components/childA.vue';
import ChildB from '../components/childB.vue';
export default {
    data(){
        return{}
    },
    components:{
        ChildA,
        ChildB
    },
}
</script>

子元件A(資料發出元件)程式碼如下:

<template>
    <div>
        <!-- 子元件A新增入參生成模組,監聽輸入框改變向元件B傳送資料-->
        子元件傳遞:
        <input 
            type="text" 
            v-model="value"
            @input='childChange'>
    </div>
</template>
<script>
// 引入中間控制元件
import Bus from '../assets/Bus.js';
export default {
    data(){
        return{
            value:''
        }
    },
    methods:{
        childChange(){
            // 通過Bus.$emit向B元件傳送資料,資料放在“childChange”中
            Bus.$emit('childChange',this.value)
        }
    }
}
</script>

子元件B(資料接收元件)程式碼如下:

<template>
    <div>
        元件接收的值{{text}}
    </div>
</template>
<script>
// 引入中間控制元件
import Bus from '../assets/Bus.js';
export default {
    data(){
        return{
            text:''
        }
    },
    created(){
        // 通過Bus.$on接收A元件發來資料
        Bus.$on('childChange',(value)=>{
            this.text = value
        })
    }
}
</script>

ps:在傳送資料和接收資料的元件都需要引入Bus.js作為中間控制元件;

以上內容為個人總結,不足之處還望支援,歡迎留言交流~

相關推薦

vue常用元件通訊方式

1.父元件傳值子元件 原理:父元件給子元件新增屬性,子元件通過props獲取屬性值,接收到父元件傳遞的引數; 案例如下: 父元件程式碼如下: <template> <div> <!-- 父元件新增入參生成模組 --

vue路由元件-頁面通訊

vue路由傳參,是頁面通訊的重要組成部分,而掌握路由傳參,必須要認識一個重要物件-$route。(切記,是$route,而不是$router) $route物件 這是一個專門用於記錄vue元件引數的物件。 例如: //router.js { path

vue父子元件之ref

在vue中,傳參的常用的就父子元件傳參,兄弟元件傳參。今天我們說的是父子元件傳參中的一種方式$ref和ref 首先我們建立一個子元件 並給他新增一個number的值和繫結一個點選事件@click='add()',每次點選加1 Vue.component('counter', {

vue路由元件

在元件中使用 $route 會使之與其對應路由形成高度耦合,從而使元件只能在某些特定的 URL 上使用,限制了其靈活性。 使用 props 將元件和路由解耦: 取代與 $route 的耦合 const User = { templat

前端框架Vue(8)——子父元件通訊

  父子間的通訊傳值是 vue 中的一個重要的內容和掌握點。   *vue2.0 推薦使用 vuex,全域性進行狀態管理。(後面再講)   首先講一下遇到的 需求背景: 解釋一下:   元件之間的關係: <div id="app">

Vue元件

component( ) 自定義元件時經常會用到引數,主要有兩種情況:父向子傳參、子向父傳參。 父子傳參: 在父子傳參中需要用到的是 component 中的 props 屬性,props 是一個數組,包含了父級元件傳來的引數。 下面這個例子中,定義了一個 user 元件,用來顯示一

2018年11月10日 關於Vue.js生態之Vue-router and 方式

關於router的用法 //在html中的相關程式碼 <div id="app"> <div> <router-link to="/">首頁</router-link> //<router-link>是Vue-route

Vue中父子元件值的方式

父元件向子元件傳值 父元件呼叫子元件時,在標籤上繫結動態屬性 <template> <div id='parent'> <v-child :title='title' :run='run'></v-child&g

VUE 路由router父子方式(路由)

VUE 路由父子傳參的方式 方案一: getDescribe(id) { // 直接呼叫router.push實現攜帶參數的跳轉this.router.push 實現攜帶引數的跳轉 this.router.push實現攜帶參數的跳轉this.

vue裡面路由的三種方式

1、方式一 通過query的方式也就是?的方式路徑會顯示傳遞的引數 HTML的方式<router-link :to="{name:xxx,query:{page:1,code:8899}}"></router-link> JS的方式 <template>

2018年11月10日 關於Vue.js生態之Vue-router and 方式

關於router的用法 //在html中的相關程式碼 <div id="app"> <div> <router-link to="/">首頁</router-link> //<router-link&

vue學習(四):子元件向父元件

子元件向父元件傳參主要依靠 v-on 和  $.emit 這個是vue官網上給的方法呼叫,我們看看頁面上怎麼使用。 子元件 main_Header.vue <template> <div> <div>{{count}}</

vue根據router,實現渲染不同元件的寫法

現在的操作 <div v-if="$route.query.src">滿足條件渲染</div> <div v-else">不滿足時渲染</div> 以前的SB操作 mounted() { if(this.$ro

vue-router 路由元件

1.最簡單的用 name傳參$route.name  輸出的是當前路由 ,不過這個一般不用1.在路由檔案router/index.js裡配置name屬性。 routes: [ { path: '/', name: 'Hello',

最詳細的vue的父子元件以及非父子元件之間的通訊方式

1.父元件傳遞資料給子元件父元件資料如何傳遞給子元件呢?可以通過props屬性來實現父元件://這裡必須要用 - 代替駝峰data(){ return { msg: [1,2,3] }; }子元件通過props來接收資料: 方式1:props: ['childMsg']方式2 :props: { childM

vue.resource delete 方法 正確方式

吐槽一下網上說的各種方法太坑,簡單實現方法 {body: json引數 } 請以新增 body 這種方式提交~ vm.$http.delete(url, {body: vm.shipments}

vue學習(三):父元件向子元件

既然是元件化開發,當然少不了資料傳遞,我們先看看官網上寫的。 使用props傳遞引數,試一下,還是用我們之前的專案結構 一、靜態傳遞 1.main_header.vue <template> <div>{{msg}}</div> &

VUE中父子元件(簡單明瞭)

· 父元件向子元件傳遞引數 child.vue如下 <template> <div class="childClass"> <h3>子元件內容</h3> <p :class

vue初始化、資料處理、元件、路由、全域性定義CSS與JS、元件生命週期

目錄 專案初始化 元件資料區域性化處理 子元件 父元件 路由邏輯跳轉 案例 元件傳參 父傳子

使用HTTP協議向服務器方式及django中獲取數的方式

type quest bsp sed 4.2 默認值 未命名 訪問表 url 使用HTTP協議向服務器傳參的四種方式 URL路徑攜帶參數,形如/weather/beijing/2018; 查詢字符串(query string),形如key1=value1&key2