vue中子組件的methods中獲取到props中的值


這個官網很清楚,也很簡單,父組件中使用v-bind綁定傳送,子組件使用props接收即可 
例如: 
父組件中

<template>
    <div>
        <head-top></head-top>
        <section class="data_section">
            <header class="chart-title">數據統計</header>
            <el-row :gutter="20" class="chart-head">
                <el-col :xs="24" :sm="12" :md="6" :lg="6"><div class="grid-content data-head blue-head">統計:</div></el-col>
                <el-col :xs="24" :sm="12" :md="6" :lg="6"><div class="grid-content data-head">銷售數量 <span>{{number}}</span></div></el-col>
                <el-col :xs="24" :sm="12" :md="6" :lg="6"><div class="grid-content data-head">銷售金額 <span>{{amount}}</span></div></el-col>
                <el-col :xs="24" :sm="12" :md="6" :lg="6"><div class="grid-content data-head">利潤統計 <span>{{profits}}</span></div></el-col>
            </el-row>
        </section>
        <chart :chartData="chartData"></chart>
    </div>
</template>

<script>
    data(){
            return {
                number: null,
                amount: null,
                profits: null,
                chartData: [10,10,10]
            }
        },
</script>

子組件中

export default {
    props: ['chartData']
}

這種情況下,子組件的methods中想要取到props中的值,直接使用this.chartData即可 
但是有寫情況下,你的chartData里面的值並不是固定的,而是動態獲取的,這種情況下,你會發現methods中是取不到你的chartData的,或者取到的一直是默認值

比如下面這個情況 

父組件中

<script>
    data(){
            return {
                number: null,
                amount: null,
                profits: null,
                chartData: []
            }
        },
        mounted(){
            this.getStatistics();
        },
        methods: {
            //獲取統計數據
            getStatistics(){
                console.log('獲取統計數據')
                axios.post(api,{

                }).then((res) => {
                    this.number = res.data.domain.list[0].number;
                    this.amount = res.data.domain.list[0].amount;
                    this.profits = res.data.domain.list[0].profits;
                    this.chartData = [this.number,this.amount,this.profits];
                }).catch((err) => {
                    console.log(err);
                })
            },
        },
</script>

此時子組件的methods中使用this.chartData會發現是不存在的(因為為空了)

這情況我是使用watch處理

解決方法如下:

使用watch

props: ['chartData'],
        data(){
            return {
                cData: []
            }
        },
        watch: {
            chartData: function(newVal,oldVal){
                this.cData = newVal;  //newVal即是chartData
                this.drawChart();
            }
        },

監聽chartData的值,當它由空轉變時就會觸發,這時候就能取到了,拿到值后要做的處理方法也需要在watch里面執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM