js 实现watch监听数据变化的代码
2019-10-13 18:05
1336 查看
1.js
/** * @desc 属性改变监听,属性被set时出发watch的方法,类似vue的watch * @author Jason * @study https://www.jianshu.com/p/00502d10ea95 * @data 2018-04-27 * @constructor * @param {object} opts - 构造参数. @default {data:{},watch:{}}; * @argument {object} data - 要绑定的属性 * @argument {object} watch - 要监听的属性的回调 * watch @callback (newVal,oldVal) - 新值与旧值 */ class watcher{ constructor(opts){ this.$data = this.getBaseType(opts.data) === 'Object' ? opts.data : {}; this.$watch = this.getBaseType(opts.watch) === 'Object' ? opts.watch : {}; for(let key in opts.data){ this.setData(key) } } getBaseType(target) { const typeStr = Object.prototype.toString.apply(target); return typeStr.slice(8, -1); } setData(_key){ Object.defineProperty(this,_key,{ get: function () { return this.$data[_key]; }, set : function (val) { const oldVal = this.$data[_key]; if(oldVal === val)return val; this.$data[_key] = val; this.$watch[_key] && typeof this.$watch[_key] === 'function' && ( this.$watch[_key].call(this,val,oldVal) ); return val; }, }); } } // export default watcher;
2.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>wathc</title> </head> <body> <script src="./watch.js"></script> <script> let wm = new watcher({ data:{ a: 0, b: 'hello' }, watch:{ a(newVal,oldVal){ console.log(newVal, oldVal); // 111 0 } } }) wm.a = 111 </script> </body> </html>
3. 给vm.a 从新赋值 就能看到 newVal 和oldVal的变化
总结
以上所述是小编给大家介绍的js 实现watch监听数据变化的代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
您可能感兴趣的文章:
相关文章推荐
- 名称案例-使用keyup事件实现1 和 名称案例-使用watch监听文本框数据的变化2
- JS实现移动端实时监听输入框变化的实例代码
- ajax 异步获取数据实现代码 (js创建ajax对象)
- JS小功能(操作Table--动态添加删除表格及数据)实现代码
- js实现json数据行到列的转换的实例代码
- 基于vue-cli的vue项目之vuex的使用5------watch监听vuex内部数据变化
- JS小功能(操作Table--动态添加删除表格及数据)实现代码
- angularjs $watch监听模型变化
- Vue.js在数组中插入重复数据的实现代码
- watch监听vuex数据改变,实现自动改变兄弟页面数据
- 项目经验:js实现定时器监听控件输入值的变化
- 用Vue.js实现监听属性的变化
- 【12】vue.js — 监听数据变化
- 005 - vue之watch深度监听数据变化
- js格式化货币数据实现代码
- vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
- echarts图表刷新:vue中传递数据给子组件,并且监听子组件中数据的变化,实现刷新echarts图表的功能
- JS调用C#后台代码---JS实现DataGrid“全选”、“反选”、调用后台代码批量删除数据
- Js表格万条数据瞬间加载实现代码
- js格式化货币数据实现代码