前端与移动开发之vue-day3(2)

【重点】为什么组件中的data属性必须定义为一个方法并返回一个对象
通过计数器案例演示

使用components属性定义局部子组件
组件实例定义方式:

<script>
    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components: { // 定义子组件
        account: { // account 组件
          template: '<div><h1>这是Account组件{{name}}</h1><login></login></div>', // 在这里使用定义的子组件
          components: { // 定义子组件的子组件
            login: { // login 组件
              template: "<h3>这是登录组件</h3>"
            }
          }
        }
      }
    });
  </script>
引用组件:

<div id="app">
    <account></account>
  </div>
使用flag标识符结合v-if和v-else切换组件
页面结构:

<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>

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属性来切换不同的子组件,并添加切换动画
组件实例定义方式:

// 登录组件
    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: {}
    });
使用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>
添加切换样式:

<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>

猜你喜欢

转载自blog.csdn.net/czbkzmj/article/details/84141795