当前位置: 首页 > news >正文

vue总结

条件渲染 v-if vs v-show

  • v-show 要切换显示内容,初始化开销大

  • v-if 根据状态只显示某个内容,状态切换概率小,切换开销大

  • 使用key管理可复用的元素(比如切换登录方式,不同方式登录内容是一样的),速度快

<tab v-model="index">
// 根据index切换显示不同内容
</tab>
<div>
  // 根据index显示不同的数据(组件内部根据外面的提供的状态获取数据)
  <div class="item">
    // 这里将v-show改为v-if切换tab并没有执行拉取数据
    <div v-show="index === 0">
      <user-trip-item 
        @setHasContent="setHasContent"
        :name="'unpaid'">
      </user-trip-item>
    </div>
    <div v-show="index === 1">
      <user-trip-item 
        @setHasContent="setHasContent"
        :name="'planned'">
      </user-trip-item>
    </div>
    <div v-show="index === 2">
      <user-trip-item 
        @setHasContent="setHasContent"
        :name="'not_reviewed'">
      </user-trip-item>
    </div>
    <div v-show="index === 3">
      <user-trip-item 
        @setHasContent="setHasContent"
        :name="'completed'">
      </user-trip-item>
    </div>
  </div>
</div>
// 子组件
// 根据不同的状态获取按钮的文字并执行不同的方法,这里可以用到表驱动法分发事件
<div >
  <div class="trip__list" v-for="(item, index) in items">
    <img 
      @click="toOrderDetail(item.orderNumber)"
      class="cover" 
      :src="item.coverPicture">
    <span class="flag">{{item.stateLabel}}</span>
    <div class="info">
      <h3 
        @click="toPorductDetail(item.productId)"
        class="title">{{item.productTitle}}</h3>
      <p class="date">{{item.startTime}}</p>
      <div class="info__bt">
        <span class="price">{{item.currency}}{{item.orderAmount}}</span>
        <span
          @click="dispatchEvent(item.state, item)"
          class="status"
          v-if="statusText[item.state] !== ''">{{statusText[item.state]}}</span>
      </div>
    </div>
  </div>
</div>

表驱动法

http://note.youdao.com/notesh... 《代码大全2》表驱动法

vue编写可复用组件

http://note.youdao.com/notesh... 登录模块
一般某个内容重复使用3次以上就要考虑写成可复用组件了,可复用组件需要定义一个清晰的公开接口

  • 数据获取 可以通过父组件props或者某种状态标示子组件内部去拉数据

  • 改变外部内容event($on、$emit) 可以通过向外暴露方法内部$emit()触发执行

  • 插槽slot预留空间给外部显示额外的自定义内容

组件缓存 keep-alive

keep-alive主要用于保留组件状态或避免重新渲染,include、exclude属性允许组件有条件的缓存

疑问:如何设置路由部分组件缓存?

<keep-alive>
  // 路由切换的时候会重新渲染拉取数据,比如当地人中心设置语言成功后回到编辑页,重新拉取数据而没有保存语言选择的内容
  <router-view></router-view>
</keep-alive>
// 改为即可
<keep-alive>
  <router-view></router-view>
</keep-alive>

路由导航 router

// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 因为当钩子执行前,组件实例还没被创建
beforeRouteEnter (to, from, next) {
  next(vm => {
    vm.languages = to.query.languages
    vm.defaultLang = to.query.defaultLang
    vm.setLanguageList()
  })
}
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
// 设置next(isSave),false来禁止用户在还未保存修改前突然离开,true则不禁止,可以设置一个变量来监听用户是否填写了信息从而是否禁用导航
}
// 编程式导航 带参数的路由(可以通过路由传递和更改数据)
// 传递参数给子路由
<div @click="toPath('/profile/modifyLanguage')"></div>
toPath (path) {
    this.$router.push({
      path: path,
      query: {
        languages: this.languages,
        defaultLang: this.oData.systemLanguages
      }
    })
  }
beforeRouteEnter (to, from, next) {
  next(vm => {
    if (from.path === '/profile/modifyLanguage') {
      vm.languages = to.query.languages // 获取子路由传过来的数据
    }
    if (from.path === '/') {
      if (vm.userRole === 1) {
        vm.getProfile('user')
      } else {
        vm.getProfile('guide')
      }
    }
  })
}
// 子路由传递数据给父路由
methods: {
  saveLanguage () {
    this.$router.push({ 
      path: '/profile',
      query: { // 传递数据给父路由(把语言传过去)
        languages: this.getSaveData()
      }
    })
  }
}
beforeRouteEnter (to, from, next) {
  next(vm => { // 获取父路由传递过来的数据
    vm.languages = to.query.languages 
    vm.defaultLang = to.query.defaultLang
    vm.setLanguageList()
  })
}

transition 实现各种动画效果

http://cn.vuejs.org/v2/guide/... 过渡效果transition的设置
http://cn.vuejs.org/v2/guide/... 过渡状态 各种复杂的效果

相关文章:

  • java虚拟机:class文件结构
  • tomcat7线程池配置
  • JS中typeof和instanceof用法区别
  • JS中闭包、函数与对象的介绍和用法
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • 从零开始学习Vue(一)
  • 从零开始学习Vue(三)
  • jmeter使用BeanShell断言
  • 裁掉你的前端吧,切版网帮你解决
  • 简介Doxygen
  • 2048-控制台版本
  • 第一章 深入理解Magento - Magento强大的配置系统
  • Directx9.0 学习教程3 -图形学之创建点 线 三角形 等
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • maven管理项目用junit测试遇到的找不到编译类问题
  • Apache的基本使用
  • ES10 特性的完整指南
  • flask接收请求并推入栈
  • js对象的深浅拷贝
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • miaov-React 最佳入门
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Vim Clutch | 面向脚踏板编程……
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 仿天猫超市收藏抛物线动画工具库
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • const的用法,特别是用在函数前面与后面的区别
  • #vue3 实现前端下载excel文件模板功能
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)(2.10) LTM telemetry
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)fiber的基本认识
  • (二)JAVA使用POI操作excel
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四)Controller接口控制器详解(三)
  • .bat文件调用java类的main方法
  • .Net CF下精确的计时器
  • .NET Core 中插件式开发实现
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net FrameWork总结
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET微信公众号开发-2.0创建自定义菜单
  • /etc/fstab 只读无法修改的解决办法
  • @Pointcut 使用
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ C++ ] 继承
  • [Angular] 笔记 21:@ViewChild
  • [AX]AX2012 SSRS报表Drill through action
  • [c#基础]DataTable的Select方法
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • [HDU3710]Battle over Cities