我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue.js代码的使用技巧有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue.js代码的使用技巧有哪些

这篇文章主要介绍了vue.js代码的使用技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue.js代码的使用技巧有哪些文章都会有所收获,下面我们一起来看看吧。

slots 新语法向 3.0 看齐

使用带有“#”的新命名插槽缩写语法,在Vue 2.6.0+中可用

举个例子:

构建插槽时,最好规划一下布局。这就是我的文章布局。构建插槽与构建组件没有什么不同。本质上,插槽是具有超强功能的组件,让我们细分一下上面的布局,组件的外观如下:

<!-- TidbitPage.vue --><template>  <article-layout>    <template #articleHeader>      <h2>I am the header</h2>    </template>    <template #articleContent>      <p>I am the content</p>    </template>    <template #articleFooter>      <footer>I am the footer</footer>    </template>    <template #side>      <aside>I am the side stuff</aside>    </template>    <template #banner>      <div>I am the banner</div>    </template>  </article-layout><template>

动态指令参数

指令参数现在可以接受动态 JavaScript 表达式 动态参数值应该是字符串,但允许null作为一个明确指示应该删除绑定的特殊值,那将会很方便。任何其他非字符串值都可能出错,并会触发警告。(仅适用于v-bind和v-on

<div v-bind:[attr]="attributeName"></div>//简写<div :[attr]="attributeName"></div>

这里的 attributeName 会被作为一个JavaScript表达式进行动态求值,求得的值将会作为最终的参数来使用。例如,如果你的 Vue 实例有一个 data 属性 attributeName,其值为 href,那么这个绑定将等价于 v-bind:href

同样地,你可以使用动态参数为一个动态的事件名绑定处理函数:

<button v-on:[eventName]="handler"></button>//简写<button @[eventName]="handler"></button>

eventName 的值为 focus 时,v-on:[eventName] 将等价于v-on:focus

同样可以适用于插槽绑定:

<my-component><template v-slot:[slotName]>Dynamic slot name</template></my-component>//简写<foo><template #[name]>Default slot</template></foo>

动态参数预期会求出一个字符串,异常情况下值为 null。这个特殊的 null 值可以被显性地用于移除绑定。任何其它非字符串类型的值都将会触发一个警告。

<!-- 这会触发一个编译警告 且 无效 --><a v-bind:['foo' + bar]="value"> ... </a>

变通的办法是使用没有空格或引号的表达式,或用计算属性替代这种复杂表达式。

@hook那些事

处理组件内定时器的步骤。通常我们一般都是这样操作的:

<script>  export default {    mounted() {      this.timer = setInterval(() => { ... }, 1000);    },    beforeDestroy() {      clearInterval(this.timer);    }  };</script>

但是其实更好的做法是:

<script>  export default {    mounted() {      const timer = setInterval(() => { ... }, 1000);      this.$once('hook:beforeDestroy', () => clearInterval(timer);)    }  };</script>

设想一个场景 如果我们需要在数据渲染到页面的之前让页面 loadingmounted 之后停止 loadingbeforeUpdata 时开始 loadingupdatad 之后停止 loading

最简单的方法就是改写组件的生命周期函数,使其在 mounted/beforeUpdata /updatad 时通知父组件显示或者隐藏 loading。

这样做显示不好,因为侵入了自组件的逻辑,增加的逻辑也和组件本身的功能好不关联。最好的办法就是使用 v-on="hook:xxx" 的方式:

<v-chart    @hook:mounted="loading = false"    @hook:beforeUpdated="loading = true"    @hook:updated="loading = false"    :data="data"/>

这样,就实现了对子组件生命周期的监听。对任意的组件都有效果,包括引入的第三方组件。

vue中的$props$attrs$listeners(可用来二次封装组件)

$props:当前组件接收到的 props 对象。Vue 实例代理了对其 props 对象属性的访问。

假如有个 input 输入框。我们有很多的原生属性,比如:name、placeholder、disabled 等等。我们如果都定义在props显示接收,未免太过繁琐。所以官网出现了:v-bind="$props"这样的操作。如果父组件传递很多的原生属性,那么我们在子组件中直接可以:

//good<input v-bind="$props"> //bad//而不是下面这样,如果很多的属性就特别繁琐<input :name="name" :placeholder="placeholder" :disabled="disabled">

我们可以利用以下方式$attrs 将原生属性直接传递给子组件,这是 Vue 在2.4.0新增的属性,包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

<input   v-bind="$attrs"   :value="value"   @focus=$emit('focus', $event)"   @input="$emit('input', $event.target.value)">

$listeners:包含了父作用域中的 (不含 .native修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。

如果子组件不在父组件的根目录下,则可以将所有事件侦听器从父组件传递到子组件,如下所示:

<template><div>  ...<childComponent v-on="$listeners" />...</div></template>

响应式数据(2.6.0新增)

我们习惯于用 Vuex 去解决状态的共享问题,但是在小项目中使用就会有增大代码体积和将代码复杂化的烦恼,所以在后来的版本中Vue新增

Vue.observable( object ) 让一个对象可响应,Vue 内部会用它来处理 data 函数返回的对象。

返回的对象可以直接用于渲染函数和 计算属性 内,并且会在发生改变时触发相应的更新。也可以作为最小化的跨组件状态存储器,用于简单的场景:

官方示例:

const state = Vue.observable({ count: 0 })const Demo = {  render(h) {    return h('button', {      on: { click: () => { state.count++ }}    }, `count is: ${state.count}`)  }}

jsx模板组件

以下面的一组状态判断按钮为例,我们很容易就下意识地在模板内写下这种代码

<button v-if="status === 1" class="btn1" :class="status === 1" @click="">未开始</button><button v-if="status === 2" class="btn2" :class="status === 2" @click="">进行中</button><button v-if="status === 3" class="btn3" :class="status === 3" @click="">可领取</button><button v-if="status === 4" class="btn4" :class="status === 4" @click="">已领取</button>

但是如果我们利用渲染函数可以将上面的代码抽取成优雅的使用组件

<!DOCTYPE html><html lang="en"><body>    <div id="app">        <child :status="status"></child>    </div>    <script class="lazy" data-src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>    <script>        Vue.component('child', {            props: {                status: {                    type: Number,                    required: true                }            },            render(createElement) {                const innerHTML = ['未开始', '进行中', '可领取', '已领取'][this.status]                return createElement('button', {                    class: {                        active: this.status                    },                    attrs: {                        id: 'btn'                    },                    domProps: {                        innerHTML                    },                    on: {                        click: () => console.log(this.status)                    }                })            }        })        var app = new Vue({            el: '#app',            data: {                status: 0            }        })    </script></body></html>

我们将所有的逻辑封装进渲染函数内,外部只需要传递一个状态参数即可改变

<child :status="status"></child>

动态组件

通过 Vue 的 元素加一个特殊的 is attribute 可以实现动态组件的效果

如图,这是一个 v-for 渲染的列表(只是目前这个版块才刚开始做,目前只有一个),圆圈内的就是一个组件,也就是要 v-for 动态组件

实际使用

一开始就是基本的组件引入了

import ColorIn from '@/components/Magic/ColorIn.vue'import LineIn from "@/components/Magic/LineIn.vue";import Header from "@/components/Magic/Header.vue";import Footer from "@/components/Magic/Footer.vue";export default{      components:{        ColorIn,        LineIn,        Header,        Footer    }}

接下来就是动态 v-for 动态组件的使用,componentList:['ColorIn','LineIn','Header','Footer']使用下面的代码即可将代码依次循环

<component v-for="(item,index) in componentList" :key="index" :is="item"></component>

编译以后的效果就是

<ColorIn></ColorIn><LineIn></LineIn><Header></Header><Footer></Footer>

Vue.filter

简单介绍一下过滤器,顾名思义,过滤就是一个数据经过了这个过滤之后出来另一样东西,可以是从中取得你想要的,或者给那个数据添加点什么装饰,那么过滤器则是过滤的工具。例如,从['abc','abd','ade']数组中取得包含‘ab’的值,那么可通过过滤器筛选出来‘abc’和‘abd’;把‘Hello’变成‘Hello World’,那么可用过滤器给值‘Hello’后面添加上‘ World’;或者把时间节点改为时间戳等等都可以使用过滤器。

场景:时间戳转化成年月日这是一个公共方法,所以可以抽离成过滤器使用

// 使用// 在双花括号中{{ message | capitalize }}// 在 `v-bind` 中<div v-bind:id="rawId | formatId"></div>// 全局注册Vue.filter('stampToYYMMDD', (value) =>{  // 处理逻辑})// 局部注册filters: {  stampToYYMMDD: (value)=> {    // 处理逻辑  }}// 多个过滤器全局注册// /class="lazy" data-src/common/filters.jslet dateServer = value => value.replace(/(\d{4})(\d{2})(\d{2})/g, '$1-$2-$3')export { dateServer }// /class="lazy" data-src/main.jsimport * as custom from './common/filters/custom'Object.keys(custom).forEach(key => Vue.filter(key, custom[key]))

.sync 语法糖

sync 就是为了实现prop 进行“双向绑定”仅此而已(父对子,子对父,来回传)

当你有需要在子组件修改父组件值的时候这个方法很好用,它的实现机制和v-model是一样的。

利用 object.freeze 提升性能

Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。 freeze() 返回和传入的参数相同的对象。

比方我们需要渲染一个非常大的数组对象,例如用户列表,对象列表,文章列表等等。

export default {  data: () => ({    users: {}  }),  async created() {    const users = await axios.get("/api/users");    this.users = users;  }};

vue 会将 data 对象中的所有的属性加入到 vue 的响应式系统中,当这些属性的值发生改变时,视图将会产生 响应,若对象的体积比较大,会消耗很多浏览器解析时间。

所以我们可以通过减少数据的响应式转换来提供前端的性能。

export default {  data: () => ({    users: {}  }),  async created() {    const users = await axios.get("/api/users");    this.users = Object.freeze(users);  }};

关于“vue.js代码的使用技巧有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“vue.js代码的使用技巧有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue.js代码的使用技巧有哪些

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

下载Word文档

猜你喜欢

vue.js代码的使用技巧有哪些

这篇文章主要介绍了vue.js代码的使用技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue.js代码的使用技巧有哪些文章都会有所收获,下面我们一起来看看吧。slots 新语法向 3.0 看齐使用带有
2023-06-27

Spring的代码技巧有哪些

这篇文章主要讲解了“Spring的代码技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring的代码技巧有哪些”吧!一 如何获取spring容器对象1.实现BeanFactory
2023-06-15

Spring中的代码技巧有哪些

本篇内容主要讲解“Spring中的代码技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring中的代码技巧有哪些”吧!一. @Conditional的强大之处不知道你们有没有遇到过这
2023-06-16

简化Python代码的技巧有哪些

本篇内容介绍了“简化Python代码的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是单行代码你可以将单行代码视为压缩在一起的
2023-07-02

HTML代码优化的技巧有哪些

今天小编给大家分享一下HTML代码优化的技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开发和设计原则结构的分离去使
2023-06-27

写好Python代码的技巧有哪些

这篇文章将为大家详细讲解有关写好Python代码的技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。程序设计的好与坏,早在我们青葱岁月时就接触过了,只是那是并不知道这竟如此重要。能够立即改善程序设计
2023-06-15

JavaScript代码优化技巧有哪些

这篇文章主要介绍“JavaScript代码优化技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript代码优化技巧有哪些”文章能帮助大家解决问题。1. 使用扩展运算符解构对象和数
2023-07-05

Python编程代码技巧有哪些

本篇内容介绍了“Python编程代码技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 提供了一组独特的工具和语言特性来使
2023-06-17

HTML代码编写技巧有哪些

这篇文章主要为大家展示了“HTML代码编写技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML代码编写技巧有哪些”这篇文章吧。1. 一定要闭合HTML标签在以往的页面源代码里,经常看
2023-06-08

Python代码优化技巧有哪些

这篇文章给大家介绍Python代码优化技巧有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、
2023-06-17

PHP代码优化技巧有哪些

这篇文章给大家分享的是有关PHP代码优化技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  1、echo比print快。  2、使用echo的多重参数代替字符串连接。  3、在执行for循环之前确定最大循
2023-06-04

写简洁java代码的技巧有哪些

小编给大家分享一下写简洁java代码的技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 定义配置文件信息有时候我们为了统一管理会把一些变量放到 yml
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录