Vue组件三问

  1. 什么是组件
  2. 为什么使用组件
  3. 怎么使用组件
    1. 一、 组件的创建
      1. 1.1全局注册组件
        1. 1.2局部注册组件
      2. 2.1组件的数据和方法
      3. 3.1组件中的props属性

什么是组件

组件的出现,能够有效的减轻Vue的代码量,让代码更具有模块化,需要什么功能就去调用对应的组件,一个组件就完成一种单一的功能

为什么使用组件

因为如果不使用组件,虽然JavaScript的方法也能完成但是如果调用多次就要多次复制粘贴,代码显得非常冗余,使用组件能如同函数一般方便简洁多次复用

怎么使用组件

一、 组件的创建

1.1全局注册组件

有三种注册方式

<script>
    var com=Vue.extend({
    template:"<h1>这是使用构造器创建的</h1>"
</script>

<script>
    Vue.component('mycom',{
    template:"<h2>这是字符串创建的</h2>"
})
</script>

<div>
   <template id="tmp1">
            <p>这是通过HTML标签创建的</p>
        </template>
</div>
<script>
        Vue.component("mycom",{
            template: '#tmp1'
        })
</script>

1.2局部注册组件
<script>
    new Vue=({
        el:'#app',
        data:{},
        components: {
            mycom :{
                template: "<h1>这是局部组件注册</h1>"
            }
        }
    })
</script>
2.1组件的数据和方法

组件中还有像Vue实例一样的选项,如datacomputedmethods。其中data属性跟Vue实例对象中的data不一样,实例对象中的data为一个对象,组件中的data必须是一个函数,所以必须将数据以return的方式返回。

<script>
    Vue.component('mycom',{
        template: "{{msg}}",
        data:function(){
            return {
                msg:"<h1>data返回方式</h1>"
            }
        }
    })
</script>
3.1组件中的props属性

组件的作用不仅是模板的复用,还能进行组件之间的数据交换也就是通信父组件中可以包含子组件,父组件传递数据给子组件,子组件收到后根据参数的不同渲染不同的内容或者操作,这个过程就是通过props属性来实现的。

<body>
    <a href="/2023/04/27/Vue组件三问/"><button class="back">回到博客</button></a>
    <div id="example">
        <!-- 组件的调用,象使用HTMl标签一样使用组件,可以重复使用  必用在VUE接管区内部使用-->
        <my-article title="学院新闻" :cnt="6" array="true"></my-article>
        <my-article :title="vmtitle[1]" :listitem="vmlistxuesheng" :array="false"></my-article>

    </div>
    <script type="text/javascript">
        //注册全局组件, 完成组件的调用
        Vue.component('my-article', {
                props: ['title', 'listitem', 'cnt', 'array'], //向组件传入形式参数定义,相当于标签的属性的定义
                // \符号是续行符,当一行字符太多,要换行书写排版更好看,多行相当于一行。
                //组件内模板使用的变量是内部定义的props参数变量,调用时再换成真实的值
                template: '<div> \
            <h1>{{title}}</h1> \
            <ul v-if="array"> \
            <li  v-for="item in cnt" >{{title}}{{item}}</li> \
            </ul> \
            <ul v-else > \
            <li  v-for="item in  listitem" >{{item}}</li> \
            </ul> \
          </div>',
                methods: {

                }
            })
            //创建根实例
        var vm = new Vue({
            el: '#example',
            data: {
                vmtitle: ['学院新闻', '学生新闻', '教师新闻'],
                vmlistxuesheng: ['学生新闻1', '学生新闻2', '学生新闻3', '学生新闻4'],
            }
        })
    </script>
</body>

欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1701220998@qq.com
导航页 GitHub