Vue文档易错点整理

这次给大家带来Vue文档易错整理,Vue文档易错点使用的注意事项有哪些,下面就是实战案例,一起来看一下。

节省代码量的mixin

mixin概念:组件级可复用逻辑,包括数据变量/生命周期钩子/公共方法,从而在混入的组件中可以直接使用,不用重复写冗余逻辑(类似继承)

使用方法:

在某一公共文件夹pub下创建mixin文件夹,其下创建mixinTest.js

const mixinTest = {  created() {    console.log(`components ${this.name} created`)  },  methods: {    hello() {      console.log('mixin method hello')    }  }}export default mixinTest

登录后复制

在组件中引用刚才的公共混入文件并使用

import mixinTest from '../pub/mixin/mixinTest.js'export default {  data() {    return {      name: 'hello'    }  },  mixins: [mixinTest],  methods: {    useMixin() {      this.hello()    }  }}

登录后复制

ps: 若是使用Vue.mixin()这个方法,则会影响之后创建的所有Vue示例,慎用!

注意mixin的几个特性:

混入的数据变量是浅合并,冲突时以组件内的数据优先(对象里面的自定义变量)

混入的生命周期函数内的逻辑会与组件内定义的生命周期函数逻辑进行合并,并且先执行(created/mounted/destroy)

混入的值为对象的选项,会混合成一个对象,冲突后也是以组件内键名优先(data/method/components/directives)

slot内容分发

slot概念引入:Vue跟React在写法上的不同就在于组件与子组件内部元素的组织上,在组件里面没有children元素供我们访问和展现(暂不考虑render函数),取而代之的API是slot

使用场景定义:

自定义的子组件里面有嵌套的HTML或者其他自定义的标签组件

这个自定义的子组件是写在父组件里面,嵌套的东西也放在父组件里面

通过在子组件的模板里面使用标签,从而达到渲染写在父组件里的嵌套标签的效果

本质是把父组件放在子组件里的内容,插到了子组件的位置,多个标签也会一起被插入

  

12345

export default { components: [selfComponent]}

export default { // 只有子组件的模板里面有slot标签,才能取到写在自定义组件里面的标签的渲染引用}

登录后复制

slot特性的进阶两点:

slot插入内容的编译作用域:被分发的内容的作用域,根据其所在模板决定

具体内容写的位置,决定了编译的作用域(大部分情况都是在父组件作用域下)

2.1.0+新增作用域插槽,从而可以把子组件的属性暴露给父组件中写在子组件内的内容使用

子组件中的slot标签可以直接写自定义属性,然后父组件写在slot中的标签加上slot-scope属性

  
  • {{ props.text }}

    登录后复制

    slot的name属性来指定标签插入的位置,也就是文档里面的具名插槽(这个官方文档说的明白)

    在子组件的模板里面写的slot有个name属性()

    在父组件中写子组件里面的插槽内容,指明slot属性(

    123

    )

    父组件的内容就会对应slot==name放到正确的位置

    没有指明slot属性的就会默认放到匿名插槽的位置上

    动态组件

    动态组件这个特性,很多人写的Vue项目也不少,但也没用到过这个,有必要多说几句

    动态组件适用情况:

    单页应用,部分组件的切换不涉及路由,只是页面有一块区域的组件要变更

    变更的组件参数定义上是一致的,比如都是对话框,要传一个对象进去,但对象里面的数据结构不同

    通过使用component的is属性,避免在template中的冗余组件代码,避免多个v-if模板代码更加整洁

    使用的方法(借鉴文档):

            

    登录后复制

    注意点:

    动态切换的组件都要引入到父组件中,渲染是动态的,但引入不是。

    包裹动态组件时,会缓存不活动的组件实例,提高性能,避免重复渲染(keep-alive不会渲染额外DOM结构)

    有include和exclude这两个属性,用于指定缓存和不缓存的组件(传入字符串/数组/正则)

    另一种避免重新渲染的方法是为标签增加属性v-once,用于缓存大量的静态内容,避免重复渲染。

    ps:不会在函数式组件中正常工作,因为它们没有缓存实例。

    动画与过渡

    其实很多前端工程师第一次用Vue的动画和过渡都是通过库组件来做到的,所以对这块没怎么深挖,各种过渡特效和按钮动画就跑起来了,现在就看下文档,补补课

    前端实现动画的基本方法分为三种种:css3的过渡和keyframe/javascript操纵dom/使用webgl或者canvas来独立实现,其中第三种是作为展示动画,与交互结合较少,而Vue作为一个框架,其支持动画基是从前两种入手的,从官方文档提到的四种支持就可以看出这一点。不过官方文档是从DOM过渡和状态过渡两个方面来讲解,前者是DOM的消失和出现的动画等属性的变化,后者是页面上某些值的变化。

    DOM属性的改变

    若是单个元素/组件的显隐,在组件外面包裹一层,而后选择是css过渡还是javascript过渡

    CSS过渡:

    vue提供了六个样式后缀,本质是在dom过渡的过程中动态地添加和删除对应的className。(-[enter|leave]-?[active|to]?)

    如果用css库来辅助开发,可以在transiton这个标签上定义自定义过渡类名,也是六个属性。([enter|leave]-?[active|to]?-class)

    常见的一种效果是元素首次渲染的动画,如懒加载图片飞入,这个时候要在transiton标签上加上appear,另有三个属性可指定(appear-?[to|active]?-class)

    ...

    登录后复制

    JS过渡:

    因为现在很多动画库需要工程师调用库提供的函数,把dom元素传入进行处理,这个时候需要这种方式

    通过在transiton这个标签上添加监听事件,共8个([before|after]?-?[enter|leave]-?[cancelled]?)

    监听事件的回调函数的第一个参数都是el,为过渡的dom元素,在enter和leave这两个还会传入done作为第二个参数

    元素首次渲染的动画,可以指定的监听事件有4个([before|after]?-?appear和appear-cancelled)

            methods: { // 以Velocity库为例  beforeEnter: function (el) {/*...*/}, // 此回调函数是可选项的设置 enter: function (el, done) {  // Velocity(el, { opacity: 1, fontSize: '1.4em' }, { duration: 300 })  done() //回调函数 done 是必须的。否则,它们会被同步调用。 }, leave: function (el, done) {  // Velocity(el, { translateX: '15px', rotateZ: '50deg' }, { duration: 600 })  done() }, leaveCancelled: function (el) {/*...*/}}

    登录后复制

    多元素过渡其实就是一句话:照常使用v-if/v-else的同时对同一种标签加上key来标识

    Vue对于这种多元素动画有队列上的处理,这就是transiton这个标签上的mode属性,通过指定(in-out|out-in)模式,实现消失和出现动画的队列效果,让动画更加自然。

     

    登录后复制

    多组件过渡也是一句话:用上一节提到的动态组件,即可完成。

    针对列表过渡,其本质仍是多个元素的同时过渡,不过列表大部分是通过数组动态渲染的,因此有独特的地方,不过整体的动画思路不变。具体有以下几点

    使用transitoin-group这个组件,其需要渲染为一个真实元素,可以通过tag这个属性来指定。

    列表的每个元素需要提供key属性

    使用CSS过渡的话,要考虑到列表内容变化过程中,存在相关元素的定位改变,如果要让定位是平滑过渡的动画,要另外一个v-move属性。 这个属性是通过设置一个css类的样式,来将创建元素在定位变化时的过渡,Vue内部是通过FLIP实现了一个动画队列,只要注意一点就是过渡元素不能设置为display:inline,这里需要文档上的代码做一个简短的demo:(其实通过在li上设置过渡transition属性也可以实现v-move的效果)

            
  • {{ item }}
  • import _ from 'lodash';export default { data() { return { items: [1,2,3,4,5,6,7,8,9] } }, methods: { shuffle: function () { this.items = _.shuffle(this.items) } }}.flip-list-move { transition: transform 1s;}

    登录后复制

    数值和属性动态变化

    这一部分的动画主要是针对数据元素本身的特效,比如数字的增减,颜色的过渡过程控制,svg动画的实现等,其本质都是数字/文本的变化。 我自己总结就是:通过利用Vue的响应式系统,把数字的变化通过外部库把DOM上对应数值的变化做出连续的效果,如1->100是个数字递增的连续过程,黑色->红色的过程。官方文档主要是用几个示例代码来说明,其本质步骤如下:

    在页面上通过input的双向绑定修改某一变量a,还有一个处理dom上的过渡效果的变量b

    这个数据被watcher绑定(watch对象中某个属性是这个变量a),触发逻辑

    在watcher里面的逻辑就是通过外部过渡库,指定初始值b和最终值a,是把b的值最后改为a

    DOM上绑定的变量就是b,如果某些复杂情况可能是基于b的计算属性,从而把b的变化过程展现出来

    上面这个思路走一遍下来就完成了一个单元级别的动画效果,这种类似的流程其实是很常见的需求,所以有必要把这个过程封装成一个组件,只暴露要过渡的值作为入口,每次改变这个值都是一个动画过渡效果。组件封装需要在上面四个步骤的基础上添加mounted生命周期规定初始值即可,同时原来的两个值a/b在组件里面作为一个值,可以用watch对象中的newValue和oldValue作为区分。   至于最后的SVG,其本质也是数字的过渡,只不过里面涉及的状态变量更多,代码更长而已,不过纯前端页面这种需求倒还是不多的,不过作为爱好倒可以鼓捣一些好玩的小demo,不过肯定需要设计师的参与,要不那些参数可不好调出来呐。

    相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

    推荐阅读:

    Angular CLI蓝本生成代码

    Angular CLI生成路由步骤详解

    以上就是Vue文档易错点整理的详细内容,更多请关注【创想鸟】其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

    发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2764819.html

    (0)
    上一篇 2025年3月8日 10:37:56
    下一篇 2025年3月6日 11:32:53

    AD推荐 黄金广告位招租... 更多推荐

    相关推荐

    • vue初学者易错点整理汇总

      这次给大家带来vue初学者易错点整理汇总,vue初学者易错点整理的注意事项有哪些,下面就是实战案例,一起来看一下。 vue的底层原理? vue组件之间的通信? JS中判断数据类型的方法有几种? 最常见的判断方法:typeof 判断已知对象类…

      编程技术 2025年3月8日
      200
    • 最实用的JS数组函数整理(图文教程)

      本篇文章小编给大家整理了非常全的js数组函数以及相关的写法规则,希望能够对读者们起到帮助和参考。 脚本之家以前就给大家整理过关于JS数组相关的内容,这次我们给大家整理的是非常实用的JS数组操作技巧和写法,学习下吧。 instanceof 检…

      编程技术 2025年3月8日
      200
    • 哪些方法可以让html文档内嵌入js

      这次给大家带来哪些方法可以让html文档内嵌入js,html文档内嵌入js的注意事项有哪些,下面就是实战案例,一起来看一下。 在HTML里嵌入JavaScript 在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内嵌,放…

      编程技术 2025年3月8日
      200
    • 动态加载JS文件3种方式整理

      这次给大家带来动态加载JS文件3种方式整理,动态加载JS文件的注意事项有哪些,下面就是实战案例,一起来看一下。 一、使用document.write/writeln()方式 该种方式可以实现js文件的动态加载,原理就是在重写文档流,这种方式…

      编程技术 2025年3月8日
      200
    • JS简单实现查看文档创建日期、修改日期和文档大小的方法示例

      这篇文章主要介绍了js简单实现查看文档创建日期、修改日期和文档大小的方法,结合实例形式分析了javascript使用filecreateddate属性、filemodifieddate属性、lastmodified属性和filesize属性…

      2025年3月8日
      200
    • 如何使用JS实现查看文档创建日期、修改日期和文档大小

      这次给大家带来如何使用JS实现查看文档创建日期、修改日期和文档大小,使用JS实现查看文档创建日期、修改日期和文档大小的注意事项有哪些,下面就是实战案例,一起来看一下。 一 介绍 查看文档创建日期、修改日期和文档大小,可以使用fileCrea…

      2025年3月8日
      200
    • webpack4.0打包优化策略整理小结

      这篇文章主要介绍了webpack4.0打包优化策略整理小结,现在分享给大家,也给大家做个参考。 本文介绍了webpack4.0打包优化策略整理小结,分享给大家,具体如下: webapck4 新特性介绍-参考资料 当前依赖包的版本   1.优…

      2025年3月8日 编程技术
      200
    • Bootstrap 中data-[*] 属性的整理

      本文给大家收藏整理了关于bootstrap 中data-[*] 属性的相关知识,感兴趣的朋友一起看看吧 【1 data-属性】 data属性是HTML5的新属性。允许开发者自由为其标签添加属性.存储数据,这种自定义属性一般用“data-”开…

      编程技术 2025年3月8日
      200
    • 使用YUIDoc记录JavaScript文档

      记录代码有点像测试;我们都知道我们应该这样做,但我们不太确定如何做,而且大多数人,如果我们诚实的话,根本不这样做,但那些这样做的人都是它的大力支持者。本教程将帮助您快速了解解决该问题的最佳方法之一:yuidoc。 什么是 YUIDoc? Y…

      2025年3月7日
      200
    • WPS文字中分页符强大的功效

      您有一份精心排版的五页文档,需要在第二页后添加一个空白页。只需在第三页顶部插入一个分页符,文档中从第三页开始的所有内容都会自动向后移动一页,从而轻松创建新的空白页。 更便捷的是,您可以使用快捷键:Ctrl+M 将当前页及后续所有内容向下移动…

      2025年3月7日
      200

    发表回复

    登录后才能评论