Vue.js在使用中的一些注意知识点


Posted in Javascript onApril 29, 2017

本文介绍的Vue.js在使用中的一些注意知识点,对大家具有一定的参考价值,下面来看看详细的介绍吧。

  • 每个 Vue 实例都会代理其 data 对象里所有的属性。
  • 注意只有这些被代理的属性是响应的。如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。
  • 除了 data 属性,Vue实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $,以便与代理的 data 属性区分。

模板语法

  • Vue.js 使用了基于HTML的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。
  • 在底层的实现上, Vue 将模板编译成虚拟DOM 渲染函数。结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。
  • Mustache里面只能是JS表达式,否则不会生效。
  • 指令的职责就是当其表达式的值改变时相应地将某些行为应用到 DOM 上。
  • 过滤器设计目的就是用于文本转换,为了在其他指令中实现更复杂的数据变换,你应该使用计算属性。

计算属性

  • 计算属性方法在组件 beforeMount 之后,Mounted 之前都会执行一遍。
  • 计算属性方法可以没有返回值。但是该属性使用,即在模板中使用了,否则不起任何作用。
  • 不经过计算属性,我们可以在method中定义一个相同的函数来替代它。对于最终的结果,两种方式确实是相同的。然而,不同的是计算属性是基于它的依赖缓存。计算属性只有在它的相关依赖发生改变时才会重新取值。这就意味着只要message没有发生改变,多次访问reversedMessage(computed内的一个方法)计算属性会立即返回之前的计算结果,而不必再次执行函数。
  • 计算属性是依赖缓存的;而methods是没有缓存的,每次都执行一遍。
  • 计算属性默认只有getter,不过在需要时你也可以提供一个 setter。参考官方实例:https://cn.vuejs.org/v2/guide/computed.html#计算-setter
  • 当你想要在数据变化响应时,执行异步操作或开销较大的操作,water方法(或者 vm.$watch API)是很有用的。

条件渲染

  • 不同的是有 v-show 的元素会始终渲染并保持在 DOM 中。v-show 是简单的切换元素的 CSS 属性 display 。
  • 一般来说, v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换使用 v-show 较好,如果在运行时条件不大可能改变则使用 v-if 较好。
  • vue尝试尽可能高效的渲染元素,通常会复用已有元素而不是从头开始渲染。但是条件渲染的时候,有时需要重新渲染而不是服用已有元素,所以可以通过设置唯一的key来实现元素不复用。参考官方例子:https://cn.vuejs.org/v2/guide/conditional.html#使用-key-控制元素的可重用

列表渲染

  • 在遍历对象时,是按 Object.keys() 的结果遍历,但是不能保证它的结果在不同的 JavaScript 引擎下是一致的。
  • v-for 也可以取整数。在这种情况下,它将重复多次模板。
  • 在用 v-for 渲染组件的时候,不能自动传递数据到组件里,因为组件有自己独立的作用域。为了传递迭代数据到组件里,我们要用 props。不自动注入 item 到组件里的原因是,因为这使得组件会紧密耦合到 v-for 如何运作。

表单控件

  • 对于单选按钮,勾选框及选择列表选项, v-model 绑定的 value 通常是静态字符串(对于勾选框是逻辑值)。

组件

  • 在 Vue 里,一个组件实质上是一个拥有预定义选项的一个 Vue 实例。
  • 使用组件时,大多数选项可以被传入到Vue构造器中,有一个例外: data 必须是函数。 原因的话,因为组件可能被多次调用,当data为普通对象时,data内的数据会被共享,当为函数的时候,则每个组件生成的为独立data作用域。
  • 在 Vue.js 中,父子组件的关系可以总结为 props down, events up 。父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。
  • 注意在 JavaScript 中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态。
  • Vue的事件系统分离自浏览器的EventTarget API。尽管它们的运行类似,但是on和on和emit 不是addEventListener 和 dispatchEvent 的别名。
  • $refs 只在组件渲染完成后才填充,并且它是非响应式的。它仅仅作为一个直接访问子组件的应急方案——应当避免在模版或计算属性中使用 $refs 。

响应原理

vue中的数据双向绑定中,只有改变vue实例上的属性时才能动态更新试图。

当data中有一个属性为对象和数组时,直接修改对象和数组的某一项数据是没办法触发试图更新的。https://vuefe.cn/v2/guide/list.html#注意事项 https://vuefe.cn/v2/guide/reactivity.html#变化检测问题

数组解决方式:

Vue.set(example1.items, indexOfItem, newValue);
example1.items.splice(indexOfItem, 1, newValue)

对象只能用第一种方式。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Javascript 刷新全集常用代码
Nov 22 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
struts2+jquery组合验证注册用户是否存在
Apr 30 Javascript
基于jquery实现复选框全选,反选,全不选等功能
Oct 16 Javascript
jQuery xml字符串的解析、读取及查找方法
Mar 01 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
JavaScript 数据类型详解
Mar 13 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
Aug 08 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
Aug 08 Javascript
使用axios请求接口,几种content-type的区别详解
Oct 29 Javascript
Javascript柯里化实现原理及作用解析
Oct 22 Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 #jQuery
Vue开发中整合axios的文件整理
Apr 29 #Javascript
Vue.js教程之axios与网络传输的学习实践
Apr 29 #Javascript
jQuery输入框密码的显示隐藏【代码分享】
Apr 29 #jQuery
jQuery实现多张图片上传预览(不经过后端处理)
Apr 29 #jQuery
jQuery设置图片等比例缩小的方法
Apr 29 #jQuery
Angular2下使用pdf插件的方法详解
Apr 29 #Javascript
You might like
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
QQ登录简单实现代码
2021/03/09 Javascript
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
layui分页效果实现代码
2017/05/19 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python对象体系深入分析
2014/10/28 Python
Python实现CET查分的方法
2015/03/10 Python
Python yield 使用浅析
2015/05/28 Python
Ubuntu下安装PyV8
2016/03/13 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
大学生志愿者感言
2014/01/15 职场文书
员工考核评语大全
2014/04/26 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL