动态组件和异步组件 自定义指令

动态组件

在动态组件上使用keep-alive
组件之间切换的时候,keep-alive可以保持这些组件的状态,以避免反复重渲染导致的性能问题。

 <keep-alive>
          <leftKa v-if="status"></leftKa>
          <rightKa v-else></rightKa>
        </keep-alive>
异步组件

局部注册组件,异步挂载

import Home from "./child/home.vue";
import Succ from "./child/succ";
import err from "./child/err";
 components: {
    // Home(resolve, reject) {
    //   setTimeout(resolve, 2000, Home);
    // },
    // Home(resolve, reject) {
    //   require(["./child/home"], resolve);
    // },
    // Home: () => import("./child/home"),
    // 处理异步加载时状态
    Home: () => ({
      component: new Promise((resolve, reject) => {
        setTimeout(resolve, 1000, Home);
      }),
      // 异步加载时的组件
      loading: Succ,
      // 加载失败时候执行的组件
      error: err,
      // 延迟加载的组件
      delay: 200,
      // 超时
      timeout: 2000,
    }),
  },
自定义组件

自定义指令
注册方式 全局注册和局部注册
主要使用 vue的钩子函数

 <input type="text" v-focus="msg" />
    <button @click="change">切换</button>
    <button v-myshow="isshow">按钮</button>

directives:{}

  directives: {
    focus: {
      bind: (el, banding, vnode) => {
        // 自定义指令首次绑定元素 进行执行
        // 参数1 el 指当前绑定指令的元素
        // 参数2 bind  对象  含有指令的相关属性
        // 参数3 vnode 为vue创建虚拟节点
        // 参数4 oldVnode 上一个虚拟节点
        // el banding Vnode oldVnode
        console.log("1111");
      },
      inserted: (el, band, vnode) => {
        el.focus();
        console.log("当前元素插入父节点执行", vnode);
      },
      //   update: () => {
      //     console.log("虚拟dom更新执行");
      //   },
      //   componentUpdated: () => {
      //     console.log("组件更新执行");
      //   },
      //   unbind: () => {
      //     console.log("解绑当前指令");
      //   },
    },
animation 进入离开,列表过渡

使用transtion标签
在进入/离开的过渡中,会有 6 个 class 切换。

v-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

v-enter-to:进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。

v-leave:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

v-leave-to:定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除。
也可以引入动画插件
第一步安装插件
cnpm install animate.css --save -dev
第二步引入插件

import animated from 'animate.css'

第三步使用插件

Vue.use(animated);
  <transition
      name="custom-classes-transition"
      enter-active-class="animated fadeInUp"
      leave-active-class="animated fadeOutLeft"
      v-on:before-enter="beforeEnter"
      v-on:enter="enter"
      v-on:after-enter="afterEnter"
      v-on:before-leave="beforeLeave"
      v-on:leave="leave"
      v-on:after-leave="afterLeave"
    >
      <p v-if="show">hello</p>
    </transition>

css样式

<style>
.bigfont-enter-active,
.bigfont-leave-active {
  transition: all 2s;
}
.bigfont-enter,
.bigfont-leave-to {
  font-size: 12px;
  opacity: 0;
}
</style>

注意animate.css不起效报错的情况
一般安装的是最新版本
这里遇到了新版本animate.css不生效问题animated不识别
解决方案是降版本
这里我降低了版本使用的是3.5.0的版本
cnpm install animate.css@3.5.0 -- save -dev

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值