赞
踩
答:vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
具体步骤:
第一步:需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter和getter 这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化
第二步:compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函 数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
第三步:Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是:
第四步:MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果。
v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值。
<input v-bind: value=”something” v-on:input=”something = $event.target.value”>
接受一个value属性 在有新的value属性时触发input事件
v-model 是动态的双向数据绑定(只能用在input, textarea, select上)
.lazy .trim .number
父组件传给子组件:子组件通过props方法接受数据;
子组件传给父组件:$emit方法传递参数
Vuex多组件共享状态(数据的管理) 组件间的关系也没有限制 功能比pubsub强大, 更适用于vue项目
Slot通信是带数据的标签
Pubsub第三方库(消息订阅与发布)适合于任何关系的组件间通信
hash模式 history模式
hash模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取
history模式:history采用HTML5的新特性;且提供了两个新方法:pushState(),replaceState()- 可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更
用于管理可复用的元素。因Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做使Vue变得非常快,为了高效的更新虚拟DOM
路由传参:
组件传参:
导入组件import Vheader from ‘./components/Vheader.vue’
挂载组件在export default 中 定义一个key为components,值为一个对象,这个对象中放着导入键值对;键为变量名,值为组件名,在es6中,键值相同时,可以缩写为一个单一的值。比如:components:{ Vheader }
在template模板中使用组件:
<Vheader> </Vheader>
减少 HTTP 请求数量
CSS Sprites
国内俗称CSS精灵,这是将多张图片合并成一张图片达到减少HTTP请求的一种解决方案,可以通过CSS的background属性来访问图片内容。这种方案同时还可以减少图片总字节数。
合并 CSS 和 JS 文件
现在前端有很多工程化打包工具,如:grunt、gulp、webpack等。为了减少 HTTP 请求数量,可以通过这些工具再发布前将多个CSS或者多个JS合并成一个文件。
采用 lazyLoad
控制资源文件加载优先级
一般情况下都是CSS在头部,JS在底部。
利用浏览器缓存
减少重排(Reflow)
减少Reflow,如果需要在DOM操作时添加样式,尽量使用 增加class属性,而不是通过style操作样式。
减少 DOM 操作
图标使用 IconFont 替换
网页从输入网址到渲染完成经历了哪些过程? 大致可以分为如下7步:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。