vue组件基本用法及示例

首先讲组件的创建 有三种方式

创建组件方式1

第一步:使用vue.extend来创建全局组件

var com1 = Vue.extend({
    template:'<h3>这是使用Vue.extend创建的组件</h3>'//通过template属性来指定要展示的内容
})

第二步:使用vue.component('组件名称',创建出来的组件模块对象)

组件名称如果是驼峰 那么调用的时候 就要'-'分开 比如 myCom1 调用的时候 就要写成<my-com1></my-com1>

组件名如果不是驼峰 则正常调用

Vue.component('mycom1',com1)

从上面可以看到 组件的名字是  mycom1 在页面上调用只需要:

<mycom1></mycom1>  

上面创建的步骤也可以简写成:

Vue.component('mycom1',Vue.extend({
    template:'<h3>这是使用Vue.extend1创建的组件</h3>'
}))

创建组件方式2

需要注意的是 这种写法 template的内容需要额外用div包裹起来

//template指向的内容必须有且只有一个根元素 也就是多个标签的时候 用div包起来
        Vue.component('mycom2',{
              template:'<div><h3>这是直接使用vue.component创建出来的组件</h3></div>'
        })

页面上调用组件跟方法1一致

创建组件方式3

第一步:先定义一个组件名,并赋予一个id

Vue.component('mycom3',{
            template:'#tmp3'
        })

template内容提取出来,编写的位置要在示例的外部 也就是在#app的外部,

然后template标签包裹起来隔开 标签内引入我们定义组件的id  tmp3

记得要用div包裹起来:

<div id="app">
        <!-- 调用组件 -->
        <mycom3></mycom3>

</div>
<!-- 在#app的外部使用template来定义组件的内容 -->
<template id="tmp3">
    <div>
       <h1>这是template元素在app外部定义的组件元素</h1>
       <h4>我觉得这个方法不错</h4>
    </div>
</template>   

创建私有组件

上述三种创建组件都是属于创建共有的组件,全局都能调用,现在介绍如何创建私有组件

首先 我们不在new的Vue实例的外部创建组件,因为那是创建全局组件的方式,私有组件实在实例内部进行;

var vm2 = new Vue({
            el:'#app2',
            data:{

            },
            methods:{

            },
            components:{
                //定义私有的组件
                login:{
                    template:'#tmp4'
                }
            }
        })

定义组件的对象:components

此时login 就是该私有组件的名称 template也是用id的形式进行传递,跟上述方法3相同

同个道理,我在页面调用只需要写上标签:

<login></login>

认识组件中data

我们new一个Vue实例的时候可以看到 我们data返回的是一个对象:

var vm = new Vue({
    el:'#app',
    data:{
              
    },
    methods:{
    }
})

但是在组件中 data必须是一个方法 并且!!! 方法内 比如要return 一个对象 哪怕是一个空对象  {  }

Vue.component('mycom1',{
   template:'#tmp1',
      data(){
          return {
              msg:'这是组件中的data定义的数据'
          }
   }
})

组件切换1

实现组件之间的切换 首先设置两个按钮 每个按钮对应显示一个组件

通过点击其中一个按钮 对应组件显示 另外一个组件则隐藏

这边先假设我们有两个组件

设置两个按钮,在我前面的博客有写到 vue的时间修饰符  这里运用.prevent 这是阻止a标签的冒泡事件

给组件绑定data属性 flag  flag默认为false也就是隐藏

可以看到点击事件中 我们进行赋值 true和false进行切换

<!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>
    <link rel="stylesheet" href="./lib/bootstrap.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.css">
    
</head>
<body>
    <div id="app">
        <a href="" @click.prevent="flag=true">登录</a>
        <a href="" @click.prevent="flag=false">注册</a>
        <login v-if="flag"></login>
        <register v-else="flag"></register>

    </div>

    <template id="tmp1">
        <div>
            <h3>登录组件</h3>
        </div>
    </template>
    <template id="tmp2">
        <div>
            <h3>注册组件</h3>
        </div>
    </template>
    
    
    <script src="./lib/Vue.js"></script>
    <script>
        //组件1
        Vue.component('login',{
            template:'#tmp1',

        })
        //组件2
        Vue.component('register',{
            template:'#tmp2',

        })

        var vm = new Vue({
            el:'#app',
            data:{
               flag:true
            },
            methods:{
                

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

组件切换2

上述的切换方式有些缺点 只能用于两个组件之间的切换 因为无非就是flase和true的切换

但是如果有多个组件,就不太适用,所以现在介绍多个组件的切换方法;

vue提供component来展示对应名称的组件(component 是一个占位符)

:is 是用来指定要展示的组件名称

<component :is="comName"></component>

这个例子有三个组件,我们在Vue实例的data对象中定义一个属性:comName

这个属性是用来干嘛的  

用来让我们选择切换组件的时候 存放组件名字的

我们看下代码:

<!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>
    <link rel="stylesheet" href="./lib/bootstrap.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.css">
    
</head>
<body>
    <div id="app">
        <a href="" @click.prevent="comName='login'">登录</a>
        <a href="" @click.prevent="comName='register'">注册</a>
        <a href="" @click.prevent="comName='chong'">充值</a>

        <!-- vue提供component来展示对应名称的组件
        component 是一个占位符, :is 是用来指定要展示的组件名称 -->
       <component :is="comName"></component>

    </div>
    
    <template id="tmp1">
        <div>
            <h3>登录组件</h3>
        </div>
    </template>
    <template id="tmp2">
        <div>
            <h3>注册组件</h3>
        </div>
    </template>
    <template id="tmp3">
        <div>
            <h3>重置组件</h3>
        </div>
    </template>
    
    
    <script src="./lib/Vue.js"></script>
    <script>
        //组件1
        Vue.component('login',{
            template:'#tmp1',

        })
        //组件2
        Vue.component('register',{
            template:'#tmp2',

        })
        //组件3
        Vue.component('chong',{
            template:'#tmp3'
        })

        var vm = new Vue({
            el:'#app',
            data:{
                comName:'login'
            },
            methods:{
                

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

接着讲,我们定义了三个组件 他们的名字分别是 login  register  chong

我们在点击的时候  让他们的名字装到我们定义的属性里面 comName 这样就实现了点击按钮显示对应名字的组件

需要注意的是,我们页面调用组件 不再是 以组件名为标签进行调用

而是只需要引入 component标签 并给属性 :is 绑定我们自己定义的comName就可以实现

我们从代码可以看出,不论我有几个组件,只要我把组件的名字放到属性comName中 点击的时候 

就能实现对应的切换 而不是局限在与false和true上面,


组件的用法和示例就介绍到这里,有什么不清楚和指教的可以在评论区留言,谢谢!

猜你喜欢

转载自blog.csdn.net/zhangzeshan/article/details/85005744