Vue.js コンポーネント間で値を渡す方法

■親コンポーネントから子コンポーネントへ値の渡し方

<子コンポーネント 渡したい変数名="値"></子コンポーネント>

    props: [
        '渡したい変数名'
    ],
<!-- 親コンポーネントから子コンポーネントへ値の渡し方サンプル -->
    <div id="app">
        <button-counter init_count="100"></button-counter>
    </div>

    Vue.component('button-counter', {
    props: [
        'init_count'
    ],
    data: function () {
        return {
        count: this.init_count
        }
    },
    template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
    })

■子コンポーネントから親コンポーネントへ値の渡し方

1.親コンポーネントに渡したいところで
this.$emit(‘通知名‘, 値)
2.親コンポーネントで通知を受け取る
<子コンポーネント v-on:通知名=’受け取った時に実行する関数‘>

<!-- 子コンポーネントから親コンポーネントへ値の渡し方サンプル -->
<body>
    <div id="app">
        <button-counter v-on:notice_add='parent_add'></button-counter>
    </div>

<script>
$(function(){

    // 子コンポーネント
    Vue.component('button-counter', {
    props: [
    ],
    data: function () {
        return {
        count: 0
        }
    },
    methods: {
        child_add: function(){
            this.$emit('notice_add', this.count)
        }
    },
    template: '<button v-on:click="child_add">You clicked me {{ count }} times.</button>'
    })

    // 親コンポーネント
    new Vue({
           el: '#app',
           methods: {
               parent_add: function(child_count){
                   alert('parent_add:'+child_count);
               }
           }
    })

});
</script>
</body>

値の送りたい時は
this.$emit(‘notice_add’, this.count)
parent_add: function(child_count){
とすればよい

■他のコンポーネントへ値の渡し方

1.おまじない
var bus = new Vue();
2.値を渡したいところで
bus.$emit(‘通知名‘, 値)
3.通知を受け取りたいコンポーネント側で
mounted: function(){
bus.$on(‘通知名‘, 受け取った時に実行する関数)
},

<!-- 他のコンポーネントへ値の渡し方サンプル -->
<body>
    <div id="app">
        <button-counter></button-counter>
    </div>

<script>
$(function(){

	var bus = new Vue();

    // 子コンポーネント
    Vue.component('button-counter', {
    props: [
    ],
    data: function () {
        return {
        count: 0
        }
    },
    mounted: function(){
        bus.$on('notice_add', this.another_add)
    },
    methods: {
        child_add: function(){
            this.count++;
            bus.$emit('notice_add', this.count)
        },
        another_add: function(another_count){
            alert('another_add:'+another_count);
        }
    },
    template: '<button v-on:click="child_add">You clicked me {{ count }} times.</button>'
    })

    // 親コンポーネント
    new Vue({
           el: '#app',
    })

});
</script>
</body>

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です