鍍金池/ 問答/HTML/ Vue父子組件傳值遇到問題

Vue父子組件傳值遇到問題

父組件代碼

<template>
  <div id="app">
    <search :funClick="func_click"></search>
  </div>
</template>

<script>
import Search from '@/components/search'
export default {
  name: 'App',
  data (){
    return{
      searchData:''
    }
  },
  methods:{
    func_click(val){
      this.searchData = val;
    }
  },
  components:{
    'search':Search,
  }
}
</script>

子組件代碼

<template>
    <div class="search-container">
        <div class="search-input">
            <i class="iconfont">&#xe7d1;</i>
            <input type="text" autofocus="autofocus" v-model.trim="search_val">
        </div>
    </div>
</template>
<script>
export default {
    props:['funClick'],
    data (){
        return{
            search_val:""
        }
    },
    watch:{
        search_val(data){
            if(data!==""){
                this.funClick(data);
            }
        }
    }
}
</script>

這個(gè)是我看別人的代碼,這個(gè)地方不太明白
props:['funClick']這個(gè)是父傳子的方法,為什么父組件的fun_click可以收到子組件input的value值,關(guān)鍵點(diǎn)事this.funClick(data)這個(gè)地方傳值,我看不明白,

當(dāng)然我也有自己的方法是,子傳父,在watch監(jiān)聽事件里面吧this.funClick(data) 改成this.$emit('funClick',data)把這個(gè)按照自定義事件傳給父組件,有哪位能看一下代碼,解釋或者探討一下這個(gè)問題嗎?

回答
編輯回答
旖襯

不難理解,父組件把自身的函數(shù)func_click通過props->funClick傳給子組件,子組件調(diào)用funClick就等于調(diào)用了父組件的func_click實(shí)現(xiàn)了數(shù)據(jù)交互
但官方是推薦按你的思路 即通過$emit進(jìn)行數(shù)據(jù)交互的

2017年8月17日 00:33
編輯回答
念初

大概說一下:
第一,上面代碼里的寫法比較符合react的思想寫法,通過傳遞回調(diào)函數(shù)達(dá)到更改數(shù)據(jù)的目的。
第二,你自己的方法是很標(biāo)準(zhǔn)的vue推崇寫法,通過事件通知派發(fā)達(dá)到目的,類似 發(fā)布/訂閱模式。

至于你的疑惑點(diǎn):

watch:{
    search_val(data){
        if(data!==""){
            this.funClick(data);
        }
    }
}

因?yàn)槭褂昧藈atch,參考vue官網(wǎng)api可以知道,這里的第一個(gè)參數(shù)data,就是input最新的值;
然后funClick是通過prop傳遞的,所以可以直接用 this進(jìn)行訪問,傳遞參數(shù)data也就是input的當(dāng)前值;

明白一點(diǎn),函數(shù)是個(gè)什么東西呢,函數(shù)存儲(chǔ)在堆里,是一種引用類型,和Object一樣通過 引用進(jìn)行傳遞。這里只不過在父組件定義了一個(gè)函數(shù),拿到另一個(gè)組件調(diào)用而已。

2017年5月20日 19:21
編輯回答
奧特蛋

第一種方法是直接執(zhí)行函數(shù), 第二個(gè)是通知父組件去執(zhí)行這個(gè)函數(shù), 第二種比較清晰, 也是vue官網(wǎng)推薦的方式..

2017年3月6日 15:57