zoukankan      html  css  js  c++  java
  • 组件的切换

    1、通过v-if或者v-show切换

    <template id="login">
            <div>
                登录组件
            </div>
        </template>
        <script>
            const login = {
                template: '#login',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
        <template id="user-info">
            <div>
                用户信息
            </div>
        </template>
        <script>
            const userInfo = {
                template: '#user-info',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
    
        <div id='app'>
            <login v-if="isLogin"></login>
            <user-info v-else="!isLogin"></user-info>
            <button @click="isLogin=!isLogin">切换</button>
    
        </div>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    isLogin:true
                },
                components:{
                    login,
                    userInfo,
                }
            })
        </script>

    2、通过vue内置component组件切换(is属性对应就是要显示的组件的名字)

    <template id="login">
            <div>
                登录组件
            </div>
        </template>
        <script>
            const login = {
                template: '#login',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
        <template id="user-info">
            <div>
                用户信息
            </div>
        </template>
        <script>
            const userInfo = {
                template: '#user-info',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
        
        <div id='app'>
            <component :is="isLogin?'login':'user-info'"></component>
            <button @click="isLogin=!isLogin">切换</button>
        </div>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    isLogin: true
                },
                components: {
                    login,
                    userInfo,
                }
            })
        </script>

    3、组件的动画效果

    1、切换的组件用transition包裹起来就行了。

    2、需要指定动画的切换顺序,希望先离开,在进入可以设置transition的mode

    3、注意事项

    1、data必须写成函数,函数必须返回对象

    2、template只能有一个根标签

    3、引用组件的时候,把驼峰变成-连接

      案例1:

    <style>
            .v-enter,
            .v-leave-to {
                opacity: 0;
                transform: translateX(100%);
            }
    
            .v-enter-active,
            .v-leave-active {
                transition: all 1s ease;
            }
    
            .v-leave,
            .v-enter-to {
                opacity: 1;
                transform: translate(0);
            }
        </style>
    
        <template id="login">
            <div>
                登录组件
            </div>
        </template>
        <script>
            const login = {
                template: '#login',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
        <template id="user-info">
            <div>
                用户信息
            </div>
        </template>
        <script>
            const userInfo = {
                template: '#user-info',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
    
        <div id='app'>
            <transition mode="out-in">
                <login v-if="isLogin"></login>
                <user-info v-else="!isLogin"></user-info>
            </transition>
    
            <button @click="isLogin=!isLogin">切换</button>
    
        </div>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    isLogin: true
                },
                components: {
                    login,
                    userInfo,
                }
            })
        </script>

      案例2:

    <style>
            .v-enter,
            .v-leave-to {
                opacity: 0;
                transform: translateX(100%);
            }
    
            .v-enter-active,
            .v-leave-active {
                transition: all 1s ease;
            }
    
            .v-leave,
            .v-enter-to {
                opacity: 1;
                transform: translate(0);
            }
        </style>
    
        <template id="login">
            <div>
                登录组件
            </div>
        </template>
        <script>
            const login = {
                template: '#login',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
        <template id="user-info">
            <div>
                用户信息
            </div>
        </template>
        <script>
            const userInfo = {
                template: '#user-info',
                data() {
                    return {
                        flag: true,
                    }
                }
            }
        </script>
    
        <div id='app'>
            <transition mode="out-in">
                <component :is="isLogin?'login':'user-info'"></component>
            </transition>
            <button @click="isLogin=!isLogin">切换</button>
        </div>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    isLogin: true
                },
                components: {
                    login,
                    userInfo,
                }
            })
        </script>
  • 相关阅读:
    技术面试之经验总结
    为何只有两篇文章?
    LOJ6364 烂柯
    mysql批量更新数据(性能优化)
    一个对象的key引发的血案
    总结与元素坐标相关的属性(再也搞不混了)
    利用nodejs搭建服务器,测试AJAX
    初探jquery之强大丰富的选择器
    Web前端开发规范手册
    IE8下标签float导致的bug。
  • 原文地址:https://www.cnblogs.com/wangxue13/p/13641887.html
Copyright © 2011-2022 走看看