iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >vue有哪些实用技巧
  • 185
分享到

vue有哪些实用技巧

2024-04-02 19:04:59 185人浏览 独家记忆
摘要

本篇内容主要讲解“Vue有哪些实用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue有哪些实用技巧”吧!监听组件的生命周期比如有父组件 Parent 和子

本篇内容主要讲解“Vue有哪些实用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue有哪些实用技巧”吧!

监听组件的生命周期

比如有父组件 Parent 和子组件 Child,如果父组件监听到子组件挂载 mounted 就做一些逻辑处理,常规的写法可能如下:

 // Parent.vue <Child @mounted="doSomething"/>  // Child.vue mounted() {   this.$emit("mounted"); }

此外,还有一种特别简单的方式,子组件不需要任何处理,只需要在父组件引用的时候通过@hook 来监听即可,代码如下:

<Child @hook:mounted="doSomething" /> <Child @hook:updated="doSomething" />

当然这里不仅仅是可以监听 mounted,其它的生命周期事件,例如:created,updated 等都可以。

watch 的初始立即执行

观察和响应 Vue 实例上的数据变动。类似于某些数据的监听回调 ,每当监听的数据变化时都会执行回调进行后续操作。

但是当 watch 一个变量的时候,初始化时并不会执行,如下面的例子,你需要在 created 的时候手动调用一次。

created() {   this.getList(); }, watch: {   keyWord: 'getList', }

上面这样的做法可以使用,但很麻烦,我们可以添加 immediate 属性,这样初始化的时候就会自动触发(不用再写 created  去调用了),然后上面的代码就能简化为:

watch: {   keyWord: {     handler: 'getList',     immediate: true   } }

watch 有三个参数:

  • handler:其值是一个回调函数。即监听到变化时应该执行的函数

  • deep:其值是 true 或 false;确认是否深入监听。

  • immediate:其值是 true 或 false,确认是否以当前的初始值执行 handler 的函数

路由参数变化组件不更新

同一path的页面跳转时路由参数变化,但是组件没有对应的更新。

原因:主要是因为获取参数写在了created或者mounted路由钩子函数中,路由参数变化的时候,这个生命周期不会重新执行。

解决方案1:watch监听路由

watch: {  // 方法1 //监听路由是否变化   '$route' (to, from) {    if(to.query.id !== from.query.id){             this.id = to.query.id;             this.init();//重新加载数据         }   } } //方法 2  设置路径变化时的处理函数 watch: { '$route': {     handler: 'init',     immediate: true   } }

解决方案2 :为了实现这样的效果可以给router-view添加一个不同的key,这样即使是公用组件,只要url变化了,就一定会重新创建这个组件。

<router-view :key="$route.fullpath"></router-view>

路由懒加载

Vue 项目中实现路由按需加载(路由懒加载)的 3 中方式:

// 1、Vue异步组件技术:  {     path: '/home',     name: 'Home',     component: resolve => reqire(['path路径'], resolve)   }  // 2、es6提案的import()   const Home = () => import('path路径')  // 3、webpack提供的require.ensure()   {      path: '/home',      name: 'Home',      component: r => require.ensure([],() =>  r(require('path路径')), 'demo')     }

require.context()

require.context(directory,useSubdirectories,regExp)

  • directory:说明需要检索的目录

  • useSubdirectories:是否检索子目录

  • regExp:匹配文件的正则表达式,一般是文件名

场景:如页面需要导入多个组件,原始写法:

import titleCom from '@/components/home/titleCom' import bannerCom from '@/components/home/bannerCom' import cellCom from '@/components/home/cellCom' components: {   titleCom, bannerCom, cellCom }

这样就写了大量重复的代码,利用 require.context 可以写成

const path = require('path') const files = require.context('@/components/home', false, /\.vue$/) const modules = {} files.keys().forEach(key => {   const name = path.basename(key, '.vue')   modules[name] = files(key).default || files(key) }) components: modules

递归组件

递归组件: 组件在它的模板内可以递归的调用自己,只要给组件设置 name 组件就可以了。

不过需要注意的是,必须给一个条件来限制数量,否则会抛出错误: max stack size exceeded

组件递归用来开发一些具体有未知层级关系的独立组件。比如:联级选择器和树形控件

<template>   <div v-for="(item,index) in treeArr"> {{index}} <br/>       <tree :item="item.arr" v-if="item.flag"></tree>   </div> </template> <script> export default {   // 必须定义name,组件内部才能递归调用   name: 'tree',   data(){     return {}   },   // 接收外部传入的值   props: {      item: {       type:Array,       default: ()=>[]     }   } } </script>

清除定时器或者事件监听

由于项目中有些页面难免会碰到需要定时器或者事件监听。但是在离开当前页面的时候,定时器如果不及时合理地清除,会造成业务逻辑混乱甚至应用卡死的情况,这个时就需要清除定时器事件监听,即在页面卸载(关闭)的生命周期函数里,清除定时器。

methods:{   resizeFun () {     this.tableHeight = window.innerHeight - document.getElementById('table').offsetTop - 128   },   setTimer() {     this.timer = setInterval(() => { })   },   clearTimer() {//清除定时器         clearInterval(this.timer)     this.timer = null     } }, mounted() {   this.setTimer()   window.addEventListener('resize', this.resizeFun) }, beforeDestroy() {   window.removeEventListener('resize', this.resizeFun)   this.clearTimer() }

自定义路径别名

我们也可以在基础配置文件中添加自己的路径别名

resolve: {     extensions: ['.js', '.vue', '.JSON'],     alias: {       'vue$': 'vue/dist/vue.esm.js',       '@': resolve('src'),       'assets': resolve('src/assets')     }   }

然后我们导入组件的时候就可以这样写:

// import YourComponent from '/src/assets/YourComponent' import YourComponent from 'assets/YourComponent'

这样既解决了路径过长的麻烦,又解决了相对路径的烦恼。

动态给修改dom的样式

原因:因为我们在写.vue文件中的样式都会追加scoped。这样针对模板dom中的样式就可以生效,但其生效后的最终样式并不是我们写的样式名,而是编码后的。比如:

<template>   <div class="box">dom</div> </template> <style lang="sCSS" scoped>   .box {     background: red;   } </style>

vue 将代码转译成如下,所以我们在js中拼接上的dom结构样式并不会生效。

.box[data-v-11c6864c]{ background:red; } <template>   <div class="box" data-v-11c6864c>dom</div> </template>

解决方法:将要改变的样式写在非scoped样式标签中。

长列表性能优化

我们应该都知道 vue 会通过 object.defineProperty  对数据进行劫持,来实现视图响应数据的变化,然而有些时候我们的组件就是纯粹的数据展示,不会有任何改变,我们就不需要 vue  来劫持我们的数据,在大量数据展示的情况下,这能够很明显的减少组件初始化的时间。

所以,我们可以通过 object.freeze 方法来冻结一个对象,这个对象一旦被冻结,vue就不会对数据进行劫持了。

export default {   data: () => ({     list: []   }),   async created() {     const list = await axiOS.get('xxxx')     this.list = Object.freeze(list)   },   methods: {     // 此处做的操作都不能改变list的值   } }

另外需要说明的是,这里只是冻结了 list 的值,引用不会被冻结,当我们需要 Reactive 数据的时候,我们可以重新给 list 赋值。

内容分发(slot)

插槽 slot,也是组件的一块 html 模板,这一块模板显示不显示、以及怎样显示由父组件来决定。实际上,一个 slot  最核心的两个问题在这里就点出来了,是显示不显示和怎样显示。

默认插槽

又名单个插槽、匿名插槽,这类插槽没有具体名字,一个组件只能有一个该类插槽。

<!-- 父组件 parent.vue --> <template>   <div class="parent">     <h2>父容器</h2>     <child>       <div class="tmpl">         <span>菜单1</span>       </div>     </child>   </div> </template>  <!-- 子组件 child.vue --> <template>   <div class="child">     <h2>子组件</h2>     <slot></slot>   </div> </template>

具名插槽

匿名插槽没有 name 属性,所以叫匿名插槽。那么,插槽加了 name 属性,就变成了具名插槽。具名插槽可以在一个组件中出现 N  次,出现在不同的位置,只需要使用不同的 name 属性区分即可。

<!-- 父组件 parent.vue --> <template>   <div class="parent">     <h2>父容器</h2>     <child>       <div class="tmpl" slot="up">         <span>菜单up-1</span>       </div>       <div class="tmpl" slot="down">         <span>菜单down-1</span>       </div>       <div class="tmpl">         <span>菜单->1</span>       </div>     </child>   </div> </template>  <!-- 子组件 child.vue --> <template>   <div class="child">     <!-- 具名插槽 -->     <slot name="up"></slot>     <h4>这里是子组件</h4>     <!-- 具名插槽 -->     <slot name="down"></slot>     <!-- 匿名插槽 -->     <slot></slot>   </div> </template>

作用域插槽

作用域插槽可以是默认插槽,也可以是具名插槽,不一样的地方是,作用域插槽可以为 slot 标签绑定数据,让其父组件可以获取到子组件的数据。

<!-- parent.vue --> <template>   <div class="parent">     <h2>这是父组件</h2>     <child       >>       <template slot="default" slot-scope="slotProps">         {{ slotProps.user.name }}       </template> </child     >>   </div> </template>  <!-- 子组件 child.vue --> <template>   <div class="child">     <h2>这是子组件</h2>     <slot :user="user"></slot>   </div> </template> <script>   export default {     data() {       return {         user: {           name: '小赵'         }       }     }   } </script>

到此,相信大家对“vue有哪些实用技巧”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: vue有哪些实用技巧

本文链接: https://www.lsjlt.com/news/85184.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue有哪些实用技巧
    本篇内容主要讲解“vue有哪些实用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue有哪些实用技巧”吧!监听组件的生命周期比如有父组件 Parent 和子...
    99+
    2024-04-02
  • Vue使用技巧有哪些
    小编给大家分享一下Vue使用技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据不响应,可能是用法有问题前几天有朋友给我...
    99+
    2024-04-02
  • Vue有哪些使用技巧
    这篇文章主要介绍了Vue有哪些使用技巧,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 将 prop 限制为类型列表在 prop 定义中使用 validator 选项,你可...
    99+
    2023-06-25
  • Vue代码的实用技巧有哪些
    本篇内容介绍了“Vue代码的实用技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!slots 新语法...
    99+
    2024-04-02
  • 实用的Vue开发技巧有哪些
    这篇文章主要讲解了“实用的Vue开发技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“实用的Vue开发技巧有哪些”吧!1.路由参数解耦通常在组件中使用路由参数,大多数人会做以下事情。e...
    99+
    2023-07-05
  • Vue使用的技巧有哪些
    这篇文章主要介绍“Vue使用的技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue使用的技巧有哪些”文章能帮助大家解决问题。1、将一个 prop 限制在一个类型的列表中使用 prop 定义...
    99+
    2023-06-30
  • Vue的使用技巧有哪些
    本篇内容介绍了“Vue的使用技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 将一个 prop 限制在一个类型的列表中使用 pr...
    99+
    2023-06-29
  • Vue项目中实用小技巧有哪些
    这篇文章将为大家详细讲解有关Vue项目中实用小技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求一:为路径配置别名在开发过程中,我们经常需要引入各种文件,如图片...
    99+
    2024-04-02
  • Vue开发技巧有哪些
    Vue开发技巧有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。路由参数解耦一般在组件内使用路由参数,大多数人会这样做:export&nbs...
    99+
    2024-04-02
  • Vue的小技巧有哪些
    这篇文章主要介绍“Vue的小技巧有哪些”,在日常操作中,相信很多人在Vue的小技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue的小技巧有哪些”的疑惑有所帮助!接...
    99+
    2024-04-02
  • Git有哪些实用技巧
    本篇内容主要讲解“Git有哪些实用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Git有哪些实用技巧”吧!将几个commit压缩成一个⚠️ 这里有一点要特别...
    99+
    2024-04-02
  • PyCharm实用技巧有哪些
    这期内容当中小编将会给大家带来有关PyCharm实用技巧有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。今天主要跟大家介绍PyCharm的高效使用技巧!以下代码演示是在 Mac 环境下,Windows...
    99+
    2023-06-16
  • Python实用技巧有哪些
    这篇文章主要讲解了“Python实用技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python实用技巧有哪些”吧!整理字符串输入整理用户输入的问题在编程过程中极为常见。通常情况下,...
    99+
    2023-06-16
  • javascript实用技巧有哪些
    本篇内容介绍了“javascript实用技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、js整数的操作使用|0和~~可以将浮点转...
    99+
    2023-06-25
  • NPM实用技巧有哪些
    今天小编给大家分享一下NPM实用技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1...
    99+
    2024-04-02
  • PowerBuilder实用技巧有哪些
    以下是一些PowerBuilder实用技巧: 使用DataWindow对象的自动过滤功能来简化数据过滤和排序操作。可以通过设置F...
    99+
    2023-10-24
    PowerBuilder
  • css实用技巧有哪些
    这篇文章主要讲解了“css实用技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css实用技巧有哪些”吧!1、如何清除图片下方出现几像素的空白间隙?方...
    99+
    2024-04-02
  • 有哪些Python实用技巧
    本篇内容主要讲解“有哪些Python实用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些Python实用技巧”吧!1. 使用youtube-dl下载YouTube视频你可以使用Pytho...
    99+
    2023-06-16
  • Vue项目常用的技巧有哪些
    本篇内容介绍了“Vue项目常用的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 使用 $attrs 和 $listeners ...
    99+
    2023-07-04
  • VB.NET List实用技巧有哪些
    这篇文章给大家分享的是有关VB.NET List实用技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。要使用VB.NET List,我们需要了解如何部署.NET框架所提供的多种方法。这也将是本文要介绍的内容...
    99+
    2023-06-17
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作