原網站的網址:https://blog.csdn.net/alokka/article/details/87104189 非常詳細的版本
看到別人的網頁寫的比較詳細,就拿過來了。留着以后自己備用 哈哈哈
網頁;https://blog.csdn.net/twodogya/article/details/80715049
一.父向子傳遞參數 繼承的方式
1.1 【父組件把(原始類型)傳給子組件 :傳遞\prop接收】 繼承的方式
父組件:<child :childtraccept='fathertransform' ></childd>
子組件:prop:[ '','','']接收
1.2 【父組件把(方法)傳給子組件 :傳遞\prop接收】 繼承的方式
父組件把方法傳遞到子組件里面,子組件調用 問題:父組件如果有多個方法怎么辦?
父組件:<child :fatherMethod='fatherMethod'></child>
子組件:props:{
fatherMethod: {
type: Function,
default: null }
},
methods:{
childClick(){ this.fatherMethod() }
}
1.3 【父組件拿到子組件所有的值 $refs】
// ref 作用在組件上 指向的是組件的實例 實例上的方法都可以調用
父組件:<child ref='child'></child>
父組件: console.log(this.$refs.child.msg) 或者 this.$refs.child.do()
1.3 【父組件拿到子組件所有的值 $children[0]】
// $children獲取的是子組件的數組 通過索引找到對應的子組件的實例
父組件:<child></child> 正常 引入 掛載 子組件
父組件:console.log(this.$children[0].msg) 或者 this.$children[0].childClick()
子組件:childClick(){
this.$children.fatherMethod()
console.log(this.$children.msg)
}
二.子組件t向父傳遞參數,$emit有兩種方式,
2.1,【子組件把(原始類型)傳給父組件 注意:函數+$emit傳遞\函數+data接收】 帶參數傳遞
子組件 :this.$emit('tell',this.msg) // 必須以函數的形式,向父組件派發事件+參數
父組件:<child @tell='know'></child> know(msg) { alert(msg); } // // 父組件中 在子組件上監聽子組件派發的tell方法 然后調用函數 就能調用子組件的原始數據
帶參數傳遞,參數是(子組件內容) -->要傳遞給父組件@接收內容->(父組件函數接收(data){ }data代表子組件的內容)
2.2,【子組件傳把(方法)傳到父組件,注意:函數+$emit傳遞\函數接收】 不帶參數傳遞
子組件:this.$emit('tell') // 函數+$emit傳遞 向父組件派發事件
父組件:<child @tell='know'></child> // 父組件中 在子組件上監聽子組件派發的tell方法 然后調用函數 就能調用子組件的方法
know(msg) { alert(msg); }
不帶參數傳遞,可以直接調用父組件函數(父組件函數接收)ChildClick(){ this.父組件函數()} :
2.3 【子組件獲取所有父組件值 $parent】
組件通過$parent獲取父組件的數據和方法
父組件:<child></child> 正常 引入 掛載 子組件
子組件:childClick(){
this.$parent.fatherMethod()
console.log(this.$parent.msg)
}
注意:$root 和 $parent 都能夠實現訪問父組件的屬性和方法,兩者的區別在於,如果存在多級子組件,通過parent 訪問得到的是它最近一級的父組件,通過root 訪問得到的是根父組件(App.vue) 所以存在組件嵌套的情況下 不要使用 $root
父子傳參: