Vue学习笔记八

子组件向父组件传值,利用自定义事件
<div id="app">
        <p>{{total}}</p>
        //定义一个事件increment,定义一个方法getResult,increment事件触发时,执行getResult方法
        <child @increment="getResult"></child>
        <child @increment="getResult"></child>
    </div>
    <script type="text/javascript">
        var child = {
            //使用系统点击事件,执行add方法
            template: "<p><button @click='add'>{{number}}</button></p>",
            data: function(){
                return {
                    number: 0
                }
            },
            methods: {
                add: function(){
                    this.number += 1
                    //触犯increment事件,和node中的相似
                    this.$emit('increment')
                }
            }
        }
        var app = new Vue({
            el: "#app",
            data: {
                total: 0,
            },
            methods: {
                //当子组件触发了increment事件的时候,该方法得到执行
                getResult: function(){
                    this.total += 1
                }
            },
            components: {
                'child': child,
            }
        })
    </script>
单个slot

为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板。这个过程被称为内容分发
除非子组件模板包含至少一个 插口,否则父组件的内容将会被丢弃。当子组件模板只有一个没有属性的 slot 时,父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签本身。
下面的代码表叔会消失

<div id="app">
        <h1>父亲</h1>
        <child>
            <p>表叔</p>
        </child>
    </div>
    <script type="text/javascript">
        var child = {
            template: "<div><h2>儿子</h2></div>",
        }
        var app = new Vue({
            el: "#app",
            components: {
                'child': child,
            }
        })
    </script>

下面代码表叔会出现

<div id="app">
        <h1>父亲</h1>
        <child>
            <p>表叔</p>
        </child>
    </div>
    <script type="text/javascript">
        var child = {
            template: "<div><h2>儿子</h2><slot>表叔出现,我消失,表叔消失,我出现</slot></div>",
        }
        var app = new Vue({
            el: "#app",
            components: {
                'child': child,
            }
        })
    </script>
slot的name属性

下面只会出现父亲header和儿子footer内容

<div id="app">
<layout>
        <h1 slot="header">父亲header</h1>
        <p slot="footer">父亲footer</p>
    </layout>
</div>
<script type="text/javascript">
    var layout = {
        template: "<div><header><slot name='header'></slot></header><footer>儿子footer</footer></div>",
    }
    var app = new Vue({
        el: "#app",
        components: {
            'layout': layout,
        }
    })
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值