1. 程式人生 > >vue父子元件傳參之ref

vue父子元件傳參之ref

在vue中,傳參的常用的就父子元件傳參,兄弟元件傳參。今天我們說的是父子元件傳參中的一種方式$ref和ref

首先我們建立一個子元件 並給他新增一個number的值和繫結一個點選事件@click='add()',每次點選加1

  Vue.component('counter', {
            template: `<div @click='add'>{{number}}</div>`,
            data() {
                return {
                    number: 0
                }
            },
       methods: {
        add() {
          
this.number++         }        }, })

 

  並在我們父元件中呼叫它

<div id='app'>
   <div>
     <counter></counter>
     <counter></counter>
     <div>{{total}}</div>
   </div>
</div>


並且在子元件中使用change方法暴露出去

this.$emit('change')

 當子元件發生改變的時候像外暴露,我們可以打印出來看看

console.log(this.$emit('change')) 

很顯然我們得change方法是起作用了的     

<counter ref="one" @change='hand'></counter>
<counter ref="two" @change='hand'></counter>

我們再通過ref 傳入兩個引數,並且新增change事件

在父元件中寫入
  var app = new Vue({
    el: '#app',
    data:{
      total:0
    },
    methods:{
      hand(){
        
this.total = this.$refs.one.number+ this.$refs.two.number       }     }   })

這樣我們就完成了父元件的傳值

 

完整程式碼如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src='vue.js'></script>
</head>
<body>
    <div id='app'>
        <counter ref='one' @change='hand'></counter>
        <counter ref='two' @change='hand'></counter>
        <div>{{total}}</div>
    </div>

    <script>
        Vue.component('counter',{
            template:`<div @click='add'>{{number}}</div>`,
            data() {
                return {
                    number:0
                }
            },
            methods: {
                add() {
                    this.number++
                    this.$emit('change')
                    console.log(this.$emit('change'))
                }
            },
        })
        var app = new Vue({
            el:'#app',
            data:{
                total:0
            },
            methods:{
                hand () {
                    this.total = this.$refs.one.number+this.$refs.two.number
                }
            }

        })
    </script>
</body>
</html>