• Vue学习笔记【24】——Vue组件(组件切换)


    使用flag标识符结合v-ifv-else切换组件

    1. 页面结构:(缺点:只适用于两个组件间切换,不适合多个)

     <div id="app">
        <input type="button" value="toggle" @click="flag=!flag">
        <my-com1 v-if="flag"></my-com1>
        <my-com2 v-else="flag"></my-com2>
      </div>
    1. Vue实例定义:

     <script>
        Vue.component('myCom1', {
          template: '<h3>奔波霸</h3>'
        })
     
        Vue.component('myCom2', {
          template: '<h3>霸波奔</h3>'
        })
     
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            flag: true
          },
          methods: {}
        });
      </script>

    使用:is属性来切换不同的子组件,并添加切换动画

    1. 组件实例定义方式:

       // 登录组件
        const login = Vue.extend({
          template: `<div>
            <h3>登录组件</h3>
          </div>`
        });
        Vue.component('login', login);
     
        // 注册组件
        const register = Vue.extend({
          template: `<div>
            <h3>注册组件</h3>
          </div>`
        });
        Vue.component('register', register);
     
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: { comName: 'login' },
          methods: {}
        });
    1. 使用component标签,来引用组件,并通过:is属性来指定要加载的组件:

       <div id="app">
        <a href="#" @click.prevent="comName='login'">登录</a>
        <a href="#" @click.prevent="comName='register'">注册</a>
        <hr>
        <transition mode="out-in">
          <component :is="comName"></component>
        </transition>
      </div>
     
    1. 添加切换样式:

       <style>
        .v-enter,
        .v-leave-to {
          opacity: 0;
          transform: translateX(30px);
        }
     
        .v-enter-active,
        .v-leave-active {
          position: absolute;
          transition: all 0.3s ease;
        }
     
        h3{
          margin: 0;
        }
      </style>

    组件切换动画

    1.把组件用transition标签包起来,定义mode

    2.定义动画的样式

     <!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>
      <script src="./lib/vue-2.4.0.js"></script>
      <style>
        .v-enter,
        .v-leave-to {
          opacity: 0;
          transform: translateX(150px);
        }
     
        .v-enter-active,
        .v-leave-active {
          transition: all 0.5s ease;
        }
      </style>
     </head>
     
     <body>
      <div id="app">
        <a href="" @click.prevent="comName='login'">登录</a>
        <a href="" @click.prevent="comName='register'">注册</a>
     
        <!-- 通过 mode 属性,设置组件切换时候的 模式 -->
          <!-- 如果不使用mode 属性,一个组件还没完全走出去,切换的新组件就进来了,这样就乱套了 -->
        <transition mode="out-in">
          <component :is="comName"></component>
        </transition>
     
      </div>
     
      <script>
        // 组件名称是 字符串
        Vue.component('login', {
          template: '<h3>登录组件</h3>'
        })
     
        Vue.component('register', {
          template: '<h3>注册组件</h3>'
        })
     
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            comName: 'login' // 当前 component 中的 :is 绑定的组件的名称
          },
          methods: {}
        });
      </script>
     </body>
     
     </html>

     

     

     

  • 相关阅读:
    DLL编写中extern “C”和__stdcall的作用
    spring mvc controller中的异常封装
    springMVC 【@response 返回对象自动变成json并且防止乱码】 & 【配置支持实体类中的@DateTimeFormat注解】
    Eclipse中修改SVN用户名和密码方法
    Maven
    j2ee、mvn、eclipse、Tomcat等中文乱码问题解决方法
    maven生成jar包
    windows超过最大连接数解决命令
    spring 国际化-i18n
    springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用
  • 原文地址:https://www.cnblogs.com/superjishere/p/11953042.html
Copyright © 2020-2023  润新知