VUE重点问题总结


Posted in Javascript onMarch 19, 2018

1、组件三种挂载方式

自动挂载

var app3 = new Vue({
 el: '#app-3',
 data: {
 seen: true
 }
})

手动挂载

// 可以实现延迟按需挂载
<div id="app"> {{name}} </div> 
<button onclick="test()">挂载</button> 
<script> 
 var obj= {name: '张三'} 
 var vm = new Vue({ 
 data: obj
 }) 
 function test() { 
 vm.$mount("#app"); 
 }
// Vue.extend()创建没有挂载的的子类,可以使用该子累创建多个实例
var app= Vue.extend({ 
 template: '<p>{{message}}</p>', 
 data: function () { 
 return { 
  message: 'message'
  } 
 } 
 }) 
 new app().$mount('#app') // 创建 app实例,并挂载到一个元素上

2、路由传递参数的方式

<p>
  <!-- query要用path来引入,params要用name来引入,故不能写为 :to="{path:'/login',params: {isLogin: true}} -->
  <!-- 跳转路由时用this.$router: this.$router.push({name:"login",params:{isLogin:true}});this.$router.push({path: '/login', query: {isLogin : true}}); -->
  <!-- 接收参数时用this.$route: this.$route.query.isLogin 和 this.$route.params.isLogin; -->
  <router-link :to="{name:'login',params: {isLogin: true}}">亲,请登录</router-link>
  <router-link :to="{name:'login',params: {isLogin: false}}">免费注册</router-link>
 </p>
 <!-- 路由出口, 路由匹配到的组件将渲染在这里 -->
 <router-view></router-view>

3、对render:h => h(App)的理解

render:h=>h(App)是ES6中的箭头函数写法,等价于render:function(h){return h(App);}.

1.箭头函数中的this是 指向 包裹this所在函数外面的对象上。

2.h是creatElement的别名,vue生态系统的通用管理

3.template:‘<app/>',components:{App}配合使用与单独使用render:h=>h(App)会达到同样的效果

前者识别<template>标签,后者直接解析template下的id为app的div(忽略template的存在)

new Vue({
 el: '#app', // 相当于 new Vue({}).$mount('#app');
 template: '<App/>', // 1、可以通过在 #app 内加入<app></app>替代 2、或者 通过 render: h => h(App) 渲染一个视图,然后提供给el挂载
 components: { // vue2中可以通过 render: h => h(App) 渲染一个视图,然后提供给el挂载
  App
 }
});

4、Vue.nextTick()的理解

与DOM相关操作写在该函数回调中,确保DOM已渲染

nextTick的由来:

由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。

nextTick的触发时机:

在同一事件循环中的数据变化后,DOM完成更新,立即执行nextTick(callback)内的回调。

应用场景:

需要在视图更新之后,基于新的视图进行操作。

在Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中。原因是什么呢,原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作都不会有问题 。

在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进Vue.nextTick()的回调函数中。

简单总结事件循环:

同步代码执行 -> 查找异步队列,推入执行栈,执行callback1[事件循环1] ->查找异步队列,推入执行栈,执行callback2[事件循环2]...即每个异步callback,最终都会形成自己独立的一个事件循环。结合nextTick的由来,可以推出每个事件循环中,nextTick触发的时机:

Javascript 相关文章推荐
JS简单实现元素复制示例附图
Nov 19 Javascript
js中各种类型的变量在if条件中是true还是false
Jul 16 Javascript
jquery获取当前元素索引值用法实例
Jun 10 Javascript
js实现YouKu的漂亮搜索框效果
Aug 19 Javascript
Bootstrap 组件之按钮(二)
May 11 Javascript
js实现密码强度检验
Jan 15 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
Sep 27 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 Javascript
JS实现时间校验的代码
May 25 Javascript
JavaScript canvas实现文字时钟
Jan 10 Javascript
p5.js入门教程之键盘交互
Mar 19 #Javascript
vue 实现的树形菜的实例代码
Mar 19 #Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
Mar 18 #Javascript
jQuery替换节点元素的操作方法
Mar 18 #jQuery
使用Angular CLI生成 Angular 5项目教程详解
Mar 18 #Javascript
分析javascript原型及原型链
Mar 18 #Javascript
jquery 实现拖动文件上传加载进度条功能
Mar 18 #jQuery
You might like
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
使用TensorFlow实现SVM
2018/09/06 Python
Python日期时间Time模块实例详解
2019/04/15 Python
python实例化对象的具体方法
2020/06/17 Python
护士求职推荐信范文
2013/11/23 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
村党支部公开承诺书
2014/05/29 职场文书
民间个人借款协议书
2014/09/30 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis