[聚合文章] vue组件学习(下)

vue.js 2017-11-14 19 阅读

上次我们说了什么是组件,和它的基本应用,下面我们来看一下我自认为的进阶内容。

子组件控制父组件

首先写好基本结构,创建一个子组件

<!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>

</head>
<body>

<div id="app">
    {{text}}
    <children></children>
    <children></children>
    <children></children>
</div>
<script src="./../vue.js"></script>
<script>
    var children = {
        props:["child"],
        template:`<div></div>`
    }
    var vm = new Vue({
        el:"#app",
        data:{
            
        },
        components:{
            children
        }
    })
    

####父元素添加自定义事件

html:
<children @addNum ="add"></children> //这里的名字可以自定义,后面是函数名。

js:

vm中写入methods且写入函数,并在data中写入数据

data:{

text:0

}

methods:{

addNum(){
    this.text ++;
}

}

这里写完大多数初学者会觉得,这有事件,也绑定了,应该就可以了吧。但不要忘了,这是自定义的,会报错的,一般我们会通过子组件去控制它,具体怎么做呢?下面的内容就是重中之重了。

在我们子组件模板中的元素中写入点击事件

template:<button @click="click">{{counter}}</button>

为了更好的看下效果我们给子元素也加上数据,通过data函数。

data(){

return{
    counter
}

}

在methods中添加事件

methods:{

click(){
    this.counter ++;  // 这里我们为了更好的看到效果。
    this.$emit("addNum")    //这里的$emit是起到触发作用的,也就是说我们想让子组件控制父组件必须用这个属性进行触发。也可以把子组件控制父组件这一过程理解为表单提交,而$emit就是最后的提交。
}

}
这样就基本完成了子组件控制父组件功能。

插值

组件还有一个很重要的东西叫做插槽 slot。

这个标签会把我们在html里的自定义标签里的内容放在自身上来,一般用在模板中,例如

    <div id="app">
        <children>1111</children>
    </div>
    <script src="./../vue.js"></script>
    <script>
        var children = {
            template:`<div><slot></slot></div>` //这里就会把我们自定义标签<children></children>里的内容放到slot中,slot标签不会在页面中显示,它只是一个功能标签
        }
        var vm = new Vue({
            el:"#app",
            data:{
                
            },
            components:{
                children
            }
        })
    </script>

当然我们要注意一种特殊情况,如果我们的自定义标签没有内容,我们可以在slot中加入内容为默认内容,但是如果我们设置了默认内容,而我们的自定义标签也不是空的,那么自定义标签里的内容会替代我们的默认内容。

如果我们的自定义标签不只一条内容,这是我们该怎么办呢?

这是就用到我们的 slot里name属行了

例如:

   <div id="app">
        <children>   // 这里我们有多条数据
            <div slot= "header">这是头</div>  // 这里我们根据name的不同去绑定不同数据
            <div slot="footer">这是尾</div>
        </children>
    </div>
    <script src="./../vue.js"></script>
    <script>
        var children = {
            template:`<div><slot name="header"></slot><slot name="footer"></slot></div>`  // 设置不同name
        }
        var vm = new Vue({
            el:"#app",
            data:{
                
            },
            components:{
                children
            }
        })
    </script>

这样,我们就可以根据name的不同而进行获得不同的数据了

vue组件远不止如此,这只是一些较为基础的东西。更多的组件知识我们可以通过官方来进行学习 https://cn.vuejs.org/v2/guide...

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。