zoukankan      html  css  js  c++  java
  • 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>

     

     

     

  • 相关阅读:
    eclipse config 2 tab -&gt; space
    APUE读书笔记-第13章-守护进程
    【转】Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
    【转】Android学习基础自定义Checkbox组件
    【转】declare-styleable的使用(自定义控件) 以及declare-styleable中format详解
    【转】android 自定义控件 使用declare-styleable进行配置属性(源码角度)
    【转】Android SwitchButton(滑动开关)
    【转】Android 如何在Eclipse中查看Android API源码 及 support包源码
    【转】如何在eclipse里关联查看android源码
    【转】setTag()/getTag()
  • 原文地址:https://www.cnblogs.com/superjishere/p/11953042.html
Copyright © 2011-2022 走看看