[Vue]如何实现全屏遮罩(附Vue.extend和el-message源码学习) 在做个人项目的时候需要做一个类似于电子相册浏览的控件,实现过程中首先要实现全局遮罩,结合自己的思路并阅读了(饿了么)element-ui中el-message的实现,来总结一下Vue中比较好的一种全局遮罩的实现方式. 调用遮罩的方式 一般由两种写法: 1.(类似el-dialog的一种写法) 在html文件中写好结构,控制元素的显示与隐藏的实现遮罩. <div class="container"&…
最近准备开启Vue的源码学习,并且每一个Vue的重要知识点都会记录下来.我们知道Vue的核心理念是数据驱动视图,所有操作都只需要在数据层做处理,不必关心视图层的操作.这里先来学习Vue的响应式原理,Vue2.0的响应式原理是基于Object.defineProperty来实现的.Vue通过对传入的数据对象属性的getter/setter方法来监听数据的变化,通过getter进行依赖收集,setter方法通知观察者,在数据变更时更新视图. 1.使用rollup搭建开发环境 安装rollup环境 n…
大体思路(十) 本节内容: 1. baseoptions 参数分析 2. options 参数分析 3. parse 编译器 4. parseHTNL 函数解析 // parse 解析 parser--名词--解析器 ==> getShouldDecode() inBroeser // 监听所有的标签 //监听href shouldDecodeNewLines / shouldDecodeNewLinesForHref delimiters: options.delimiters //改变文本插…
大体思路(八) 本节内容: 1.Observe 如何响应数组的变化 代理原型 数组变异方法 shell cacheArrProto methods 新添加的数组需要加到显示系统里面,拦截 push等的方法 swith(method){ case:"push"/"unshift" : 存储东西} observer.prototype.observeArray = function(items){ observe(item[i]) } observe ==> va…
大体思路(七) 本节内容: deps 依赖收集的数组对象 => Dep 构造函数 /** ==> observe() * var ob * ==> if --isObject * ==> if -- shouldObserve isExtensible is_Vue 是否可扩展 * ==> ob = new Observe(value); * == if ob.vmCount++ * ==> reutrn ob * Observe(value){ * this.valu…
在看 underscore.js 源码的时候,接触到了这样两个方法,很有意思: 我先把实现的代码撂在下面,看不懂的可以先跳过,但是跳过可不是永远跳过哦- 一个是 throttle: _.throttle = function(func, wait, options) { var context, args, result; // setTimeout 的 handler var timeout = null; // 标记时间戳 // 上一次执行回调的时间戳 var previous = 0; /…
一.代码实例 回到第IOC的第七章context部分,我们看源码分析部分,可以看到在spring的bean加载之后的第二个重要的bean为applicationEventMulticaster,从字面上我们知道它是一个事件广播器.在第8和9部分,详细描述了广播器的初始化: 1.查找是否有name为applicationEventMulticaster的bean,如果有放到容器里,如果没有,初始化一个系统默认的放入容器 2.查找手动设置的applicationListeners,添加到applic…
provide/inject 数据响应式更新的坑及源码解析 下面是我自己曾经遇到 一个问题,直接以自己QA的形式来写吧 自问自答了,需要的同学也可以直接访问segmentfault地址 官网给出实例,说本身是不支持数据响应式的, 但是可以传入响应式数据,那么provide,inject就可以实现响应式.我这里理解应该没错哈,有不对的地方请指出. 我自己写的demo,做了如下更改 parent 页面: export default { provide(){ return {foo:this.fon…
vue在init的时候会执行observer方法,如果value是对象就直接返回,如果对象上没有定义过_ob_这个属性,就 new Observer实例 export function observe (value: any, asRootData: ?boolean): Observer | void { if (!isObject(value) || value instanceof VNode) { return } let ob: Observer | void if (hasOwn(v…
大体思路 (四) 上节回顾: A: 对于生命周期函数将父子组件的函数放到一个数组里面,特定时间点调用,保证父子组件函数都调用到. B: 对于directive,filters,components 等的资源选项,父选项将以原型的形势处理,正式因为这样子,在任何地方都可以用到内部自定义指令. C: 对于watch选项的合并,类似于生命周期,如果父子组件相同的观测字段,将合并为一个数组. 本节内容: props normalizeProps normalizeDirective 规范化 props…