实现一个简单的 vue 无限加载指令
vue 中的自定义指令是对底层 dom 进行操作,下面以实现滚动到底部加载数据,实现无限加载来介绍如何自定义一个简单的指令。
无限加载的原理是通过对滚动事件对监听,每一次滚动都要获取到已滚动到距离,如果滚动的距离加上浏览器窗口高度,会大于等于内容高度,就触发函数加载数据。
vue 中的自定义指令是对底层 dom 进行操作,下面以实现滚动到底部加载数据,实现无限加载来介绍如何自定义一个简单的指令。
无限加载的原理是通过对滚动事件对监听,每一次滚动都要获取到已滚动到距离,如果滚动的距离加上浏览器窗口高度,会大于等于内容高度,就触发函数加载数据。
ListView 组件在 react-native 开发中是会频繁使用的。所以在实际开发时,要实现多选操作时碰到一个坑,虽然使用很奇葩的手段解决了,但并没有从根本上解决遇到的问题。经过别人指点后,终于了解问题产生的原因,记录下这个算得上是基础知识的坑。
第一次写测试是在看《Python Web开发:测试驱动方法》的样章的时候,当通过一行命令就可以打开浏览器并完成指定操作时,感觉非常有趣。在无聊的时候,想到是否可以利用这种方式来简化每日写日报的工作,于是找到了selenium + nightwatch
搭建的前端测试环境,在实现了这个小目标后,想着将学习到的东西用在项目中。个人觉得该测试环境最大的作用应该是可以简化填写表单的操作,如果项目存在很多表单,在进行业务测试的时候,如果每次都要填写一遍表单,将会是一个非常枯燥无聊的工作。正在进行的项目刚好有非常多的表单,所以尝试利用该工具方便之后的业务测试。
网上已经有很多关于这些的文章,不过对于测试零基础的人来说还是会有一些吃力,所以这篇笔记会提供最简单最简单的实现方式。
之前使用 nodejs 完成了简陋版的静态服务器,了解了服务器的运行机制:
学习 promise、generator和最新的 await。
假设现在有这么一个需求:
用户输入关键词查询记录,先按照书籍ISBN码进行搜索,如果没有搜索到,就按照书籍名称搜索,如果没有搜索到,就按照借阅会员学号搜索,如果没有搜索到,就按照借阅会员姓名搜索。
经历过一个项目后,在“想法”->“实现”的过程中,对产品和设计有了更深的理解( 偏见 ),产品、UI、UE需要做什么?顺序又是怎么样的。
公司使用 svn 作为版本控制,但是在使用 gulp 后,gulp 执行过程中却总是出现EPERM:operation not permitted
错误。
这篇笔记“初步”解决了这个问题,解决方法涉及到 gulp 的任务执行顺序、node 执行 shell 命令 两个知识点。
在Vue.js中,数据的变化会引起 DOM 的改变,是否能理解为 DOM 订阅了数据的改变事件,每当数据改变时,就发布广播,DOM 得以知道数据改变?
具体如何实现呢?尝试以自己对数据绑定的理解,先实现一个“看起来”能够监听数据的实例,而不是一开始就阅读 Vue 的源码(不过如果没先阅读过,也不知道自己看不懂…),再将该实例进行优化。
虽然不直接阅读源码,但首先需要对 Vue 的使用方式了解。
数据绑定的功能基本实现了,但也很明显存在很多问题,
首先,第一个问题,现在是将属性名作为了事件名来实现数据的监听,假设存在name
和person.name
,我们是将name
传入渲染函数,对节点遍历查找“指令的值”,将其与name
进行对比,符合就是找到了,但是很明显'person.name' !== 'name'
,所以无法实现双向绑定;第二个问题当然是数组类型的处理;
参考 Vue 源码(v0.10)来解决这些问题。
之前代码存在很多问题,最大的问题是,实现的并不是一个严格意义上的观察者模式(发布-订阅模式),因为默认订阅了所有数据,且不能取消订阅。
在《JavaScript设计模式与开发实践》中,使用售楼处的例子来类比观察者模式:
售楼处属于发布者,小明(需要购房的人)是订阅者,小明向售楼处订阅了房子开售的信息,售楼处就把小明的信息写入记录表,当房子开售时,售楼处遍历记录表通知到小明(和其他记录表上的人)。
把这个例子和 vue 的实现类比:
创建实例时,发布者(售楼处)会把渲染函数(购房者)添加到发布列表(记录表)中,数据变化(房子开售)时,发布者(售楼处)会调用渲染函数(通知购房者)。
而且不同的数据可以类比于不同户型的房子。不同的数据(不同户型的房子)改变(发售)时,可以通知不同的渲染函数(购买者)。