【Vue 组件以及插槽】

一、vue组件

什么是组件:组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可。

组件化和模块化的不同:
模块化:是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一(高内聚低耦合
组件化:是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用

1、Vue.extend Vue.component

定义全局组件(组件的名字,声明)

<div id='app'>
        <!-- 1 -->
        <!-- 组件的名字当作标签 不使用内置或保留的HTML元素作为组件id -->
        <login></login>
</div>
 var login = Vue.extend({
       template:'<h1>登录1</h1>'
     });
   // 定义全局组件 (组件的名字,声明)
  Vue.component('login',login)

2、

<div id='app'>
        <!-- 1 -->
        <!-- 组件的名字当作标签 不使用内置或保留的HTML元素作为组件id -->
        <login></login>
</div>
Vue.component('login',{
            template:'<h1>登录2</h1>'
        });
        

3、

<script type="x-template" id="temp">
        <h1>登录3</h1>
</script>

Vue.component('login', {
            template: '#temp'
        })

4

 <template id="temp">
        <!-- 只能有一个根元素 -->
        <div v-if="true">
            <h2>登录4</h2>
            <h1>登录</h1>
        </div>
        <div v-else>
            <!-- <h3>登录</h3> -->
        </div>
 </template>

 Vue.component('login', {
            template: '#temp'
        })

二、私有组件定义

  <div id='app1'>
        <!-- 组件的名字当作标签
        不使用内置或保留的HTML元素作为组件的id
        -->
        <my-login></my-login>
    </div>
    <template id="temp">
        <div>
            <h2>登录</h2>
        </div>
    </template>
/* 私有定义 */
            components: {
                'my-login': {
                    template: '#temp'
                }
            }

三、展示数据和响应事件

  <template id="login">
        <div>
            <button @click="add(4)">4</button>
            登录{{msg}}{{num}}
        </div>
    </template>
 Vue.component('login', {
            template: '#login',
            //为什么组件中的data属性必须定义未一个方法并返回一个对象
            // 数据隔离
            data() {
                return {
                    msg: '今天学组件',
                    num: 6,
                }
            },
            methods: {
                add(n) {
                    this.num += n
                }
            },
            beforeCreate () {
              console.log(1);  
            },
            created () {
               console.log(2); 
            },
            beforeDestroy () {
               console.log('beforeDestroy'); 
            }, 
            destroyed () {
                console.log('destroyed');
            }
        })
 <!-- 使用component标签,来引用组件,并通过:is属性来指定要加载的组件-->
        <!-- mode 只能用于组件 -->
        <transition mode="in-out">
            <component :is="flag?'login':'mine'"></component>
        </transition>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值