前端深度学习Vue2框架(四)

一.混入语法

混入语法就是代码复用,重复利用的代码块,通过mixins实现

//混入语法
const options={

data(){
return {num:100}
},
methods:{
  add(){this.num++}
}
}

const CompA = {
        // 组件中有data,优先使用data里的属性和方法
        data(){
          return {
            num:0

          }
        },
        mixins: [options],
        template: `
      <div>
        <h3>A组件</h3>
        <p>{{num}}</p>
        <button @click="add">按钮</button>
        </div>
      `,
      };

 二.插槽(可扩展的组件)

1.匿名插槽  通过<slot> 可以在组件中扩展

  <div id="app">
    <comp-header>
      <!-- 无名插槽 -->
      <span>123</span>
    </comp-header>
    </div>

//  可扩展的组件(插槽)可以在vue实例里的组件里书写文本以及标签
      const CompHeader = {
        template: `
        <header class="header">
        <div class="left">
          <slot></slot>
        </div>
      </header>
    `,
      };
 new Vue({
        //挂载容器
        el: "#app",
        components:{
          CompHeader
        }
      });

2.具名插槽

<div id="app">
      <!--  // 具名插槽输入名字在使用是要用v-slot 或者#-->
      <!-- template 用入写入新标签元素 -->
      <comp-header>
        <template v-slot:left>
          <span>LOGO</span>
        </template>
        <template v-slot:center>
         <input type="text" placeholder="请输入">
        </template>
        <template #right>
          <span>签到</span>
        </template>
      </comp-header>
    </div>

 //  slot 插槽内置属性
      const CompHeader = {
        template: `
        <header class="header">
        <div class="left">
          <slot name="left"></slot>
        </div>
        <div class="center">
          <slot name='center'></slot>
        </div>
        <div class="right">
          <slot name='right'></slot>
        </div>
      </header>
    `,
      };

new Vue({
        //挂载容器
        el: "#app",
        components:{
          CompHeader
        }
      });

三.动态组件

通过内置的组件component的is属性,决定渲染哪一个组件

 //可以通过点击改变component修改is
<div class="tab">
     <div @click="tabFunc(0)" :class="['btn',index==0?'active':'']">最新</div>
     <div @click="tabFunc(1)" :class="['btn',index==1?'active':'']">热门</div>
  </div>
//通过内置组件
 <component  :is="compName"> </component>
//此处有两个组件
const NewSong={
        template:`
        <div style="height: 120px;background-color: pink;">
        <h3>最新音乐</h3>
      </div>`
    }
    const HotSong={
        template:`
        <div style="height: 120px;background-color:yellow;">
        <h3>热门音乐</h3>
      </div>`
    }


    new Vue({


 el:"#app",
 components:{
      NewSong,
      HotSong
    }

})

 四.过渡

利用内置组件transition 组件,可以实现过渡(动画入场,动画离场)

<style>

 /* 入场 */
   .v-enter{
      transform: translateX(-100%);
      opacity: 0;
    }
    .v-enter-active{
      transition: all .5s;
    }
    .v-center-to{
     transform: translateX(0%);
     opacity: 1;
    }
    /* 离场 */
    .v-leave{
      transform: translateX(0%);
      opacity: 1;
    }
    .v-leave-active{
      transition: all .5s;
    }
    .v-leave-to{
     transform: translateX(-100%);
     opacity: 0;
    }

</style>



 <!-- 使用过渡需要加内置属性 -->
      <transition>
        <div v-if="isShow" class="bg-primary mt-2" style="height: 200px;"></div>
      </transition>

 五.动画

在vue中可以使用动画搭配过渡特效对标签进行离场入场的动画形式

<style>

/* 入场类名 */
    .enter-box {
        animation: enter-ani .5s  forwards;
    }

    /* 离场类名 */
    .leave-box {
        animation: leave-ani .5s  forwards;
    }
    

    /* 自定义动画 */
    /* 入场动画 */
    @keyframes enter-ani {
        0% {
            transform: scale(.5) rotate(180deg);
            opacity: 0;
        }
        100% {
            transform: scale(1) rotate(0deg);
            opacity: 1;
        }
    }
    /* 离场动画 */
    @keyframes leave-ani {
        0% {
            transform: scale(1) rotate(0deg);
            opacity: 1;
        }
        100% {
            transform: scale(.5) rotate(180deg);
            opacity: 0;
        }
    }
</style>


<transition  
      enter-active-class="enter-box"
      leave-active-class="leave-box"
      >
        <div v-if="isShow" class="bg-primary mt-2"  style="height: 200px;"></div>
      </transition>


//还可以使用动画库的方式设计动画

<transition
      enter-active-class="animate__animated animate__lightSpeedInLeft"
      leave-active-class="animate__animated animate__lightSpeedOutRight"
      >
        <div v-if="isShow" class="bg-warning mt-2"  style="height: 200px;"></div>
      </transition>

六.keep-alive 组件缓存

keep-alive 是一种保存组件状态的内置属性,通常用于动态组件中

 <style>

 /* 入场类名 */
      .enter-box {
        animation: enter-ani 0.5s forwards;
      }

      /* 离场类名 */
      .leave-box {
        animation: leave-ani 0.5s forwards;
      }

      @keyframes enter-ani {
        0% {
          transform: scale(0.5) rotate(180deg);
          opacity: 0;
        }
        100% {
          transform: scale(1) rotate(0deg);
          opacity: 1;
        }
      }

      @keyframes leave-ani {
        0% {
          transform: scale(1) rotate(0deg);
          opacity: 1;
        }
        100% {
          transform: scale(0.5) rotate(180deg);
          opacity: 0;
        }
      }
</style>

<!-- 处理动画,利用enter-active,leave-active 属性设置动画离场入场动画过渡 -->
      <transition enter-active-class="enter-box" leave-active-class="leave-box">
        <!-- vue实例与组件都有生命周期  创建  挂载  更新  销毁 -->
        <!-- 加上 keep-alive内置的组件输入的值销毁时不会消失-->
        <!-- 缓存数据状态的内置组件 -->
        <!-- include (包括缓存) 和exclude (排除缓存)  允许组件内不同标签哪些可缓存哪些不可缓存-->
        <!-- keep-alive不能作用与兄弟只能作用于嵌套 -->
        <keep-alive include="aaa">
        <aaa v-if="isShow"></aaa>
        </keep-alive>
      </transition>

 

相关推荐

  1. 前端深度学习Vue2框架

    2024-04-26 16:48:04       36 阅读
  2. 前端小白学习Vue2框架(一)

    2024-04-26 16:48:04       35 阅读
  3. VUE 前端框架学习总结

    2024-04-26 16:48:04       57 阅读
  4. 前端学习笔记 2Vue

    2024-04-26 16:48:04       48 阅读
  5. 前端小白学习Vue框架(二)

    2024-04-26 16:48:04       39 阅读
  6. web前端 Vue 框架面试120题(

    2024-04-26 16:48:04       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 16:48:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 16:48:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 16:48:04       82 阅读
  4. Python语言-面向对象

    2024-04-26 16:48:04       91 阅读

热门阅读

  1. js中页面请求高并发的处理,限制最大请求数量

    2024-04-26 16:48:04       32 阅读
  2. 二叉树的三种遍历方式非递归

    2024-04-26 16:48:04       35 阅读
  3. MySQL 查询优化思路

    2024-04-26 16:48:04       113 阅读
  4. 学python的第二十一天

    2024-04-26 16:48:04       147 阅读
  5. SQL CASE 语句

    2024-04-26 16:48:04       34 阅读
  6. 2024.4.26力扣每日一题——快照数组

    2024-04-26 16:48:04       143 阅读
  7. Linux 抽象命名空间(Abstract Namespace)详细介绍

    2024-04-26 16:48:04       36 阅读
  8. 大数据开发项目流程

    2024-04-26 16:48:04       49 阅读