zoukankan      html  css  js  c++  java
  • Vue组件切换-以登录注册为例【加动画效果】

    方式一v-show 或者 v-if&v-else,通过控制一个标志位的bool值来实现组件的切换 []

     方式一有局限性,就是只能控制两个组件间的切换,因为bool值就true和false两个。

    方式二:使用vue官方提供的<component>标签,通过给这个标签绑定is属性实现多个组件之间的切换

      

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="../../js/vue.js"></script>
    </head>
    <style>
        .v-enter,
        .v-leave-to{
            transform: translateX(150px);
        }
        /* 动画四个阶段  */
        .v-enter-active,
        .v-leave-active{
            opacity: 0 ;
            transition: all 1s ease;
        }
    </style>
    <body>
        <div id="app">
            <!-- prevent 阻止默认事件,a就是跳转这个默认事件
            v-if为真就渲染v-if这个组件,而不会进入v-else,v-else亦然 -->
            <a href="" @click.prevent="flag=true" >登录</a>
            <a href="" @click.prevent="flag=false" >注册</a>
           <login v-if="flag"></login>
           <!-- 使用v-if v-else 实现组件切换 -->
           <register v-else="flag"></register>
        </div>

        <div id="app2">
            <!-- 点击a传入对应组件的名称 -->
            <a href="" @click.prevent="componentname='login'" >登录</a>
            <a href="" @click.prevent="componentname='register'" >注册</a>
            <!--第二种方式实现组件切换,第一种有缺陷,多个vue组件时,无法使用v-if、else  -->
            <!-- 使用vue  提供的 component标签  :is=" 组件名称 " 提供那个就展示那个 -->
            
            
        </div>
        <div id="app3">
            <a href="" @click.prevent="componentname='login'" >登录</a>
            <a href="" @click.prevent="componentname='register'" >注册</a>
        <!--如果组件想要实现一些切换效果,只需要在transition 标签中,设定model='out-in{【先出再进】} /in-out【先进再出】'  -->
         <transition model='out-in'>
            <component :is="componentname">
                <!-- 绑定一个变量,变量指向那个组件就展示那个组件, -->
            </component>
         </transition>   
        </div>

    </body>
    <script>
        Vue.component('login', {
            template:'<h2>这是登录组件</h2>'
        })
        Vue.component('register', {
            template:'<h3>这是注册组件</h2>'
        })

        let vm = new Vue({
            el:'#app',
            data:{
                vmsg:'hello world',
                flag:true,
                
            }
        })
        let vm2 = new Vue({
            el:'#app2',
            data:{
                componentname:'login',
            }
        })
        let vm3 = new Vue({
            el:'#app3',
            data:{
                componentname:'login',
            }
        })
    </script>
    </html>
  • 相关阅读:
    如何禁用事件的浮升(div的子元素的点击事件会触发父元素的点击事件)
    如何用Ajax加载服务器的图片
    MyBaits一对一的查询方法
    WEB编程中获取src目录下的文件(没有src目录)
    Vs code背景图
    JS正则表达式
    宏任务和微任务:setTimeout和Promise执行顺序
    MySql操作(一)
    Js 运行机制和Event Loop
    浅拷贝与深拷贝
  • 原文地址:https://www.cnblogs.com/Hijacku/p/14734118.html
Copyright © 2011-2022 走看看