当前位置: 首页 > Web前端 > HTML

vue2.x插件,响应式原理学习

时间:2023-03-28 12:28:11 HTML

插件刚开始接触vue自定义插件的时候,很容易混淆vue的概念和用法,什么是vue插件?什么是vue组件?下面我结合代码和案例做一个小总结。要求:小菜,请团队开发一个组件。现在有两个项目需要使用它。做一个类似alert的弹窗。当其他合作伙伴通过一定条件时,将触发并显示此弹窗。配菜:嗯,无非就是建立一个publiccomponents文件夹,然后在里面写一个altercomponent。然后在需要的页面中导入,注册到当前组件的components属性中。实际上,这是组件使用的基本场景。需求:小菜,现在情况变了,领导说这种导入方式有点麻烦,如果我有10个地方要用,那我就得导入10次,所以小菜,请开发一个全局alter插件,这样你就不需要在任何地方导入它。配菜:这个。..插入???成分???有什么不同?怎么写插件???要求:哈哈,我已经跟你说了他们和要求的区别。所谓插件,就是希望可以全局使用。也就是说,这个东西是绑定在Vue根实例下的一个对象,不需要用到的地方都引入了。正好之前项目中有一个自定义插件视图的案例,可以借鉴一下。小菜:太好了,我给大家讲解一下怎么玩。插件是vue实例下绑定的对象,怎么绑定?每个插件都是一个js文件,通过exportdefault导出一个对象,对面有个install方法。这个钩子在全局注册的时候会自动调用install方法。我们把写好的类绑定到Vue的原型对象上,这样一个插件就写好了。然后我们需要在main.js中注册它。注册好插件后,剩下的就是全局使用了。Bimfactory类中有很多方法,我们都可以通过this.$bimFactory来调用它们。我们之前开发的常见插件如vue-router、antdv中的$message等,都是在Vue实例下绑定的插件。响应式原理学习https://v2.cn.vuejs.org/v2/gu...问题一:什么是响应式?答:随着数据的变化,驱动程序页面视图也会更新。问题二:如何跟踪数据变化?答:Vue会遍历这个对象的所有属性,并使用Object.defineProperty将所有这些属性转换为getters/setters。问题三:什么是getters、setters和Object.defineProperty?答:数据属性有两种,一种是普通数据属性,一种是通过getters和setters修饰的accessor属性。下表显示了它们的区别configurable(表示是否可以通过delete删除属性重新定义属性,是否可以修改属性,或者是否可以将属性修改为accessorattribute。)enumerable(是否可以枚举)value(值)可写(是否可修改)getset数据属性canbecancannotcannotaccessorpropertycanbecannotcannotcan在对象中声明getter和setter语法,当属性为阅读或分配。constobj={log:['example','test'],getlatest(){if(this.log.length==0)返回未定义;返回this.log[this.log.length-1];}}console.log(obj.latest);//"test"Object.defineProperty方法会直接在一个对象上定义一个新的属性,或者修改一个对象已有的属性,并返回这个对象。constobject1={};Object.defineProperty(object1,'property1',{value:42,writable:false});object1.property1=77;//在严格模式下抛出错误console.log(object1.property1);//expectedoutput:42varbValue=38;Object.defineProperty(o,"b",{//使用方法名缩写(ES2015特性)//下面两个缩写等价于://get:function(){returnbValue;},//set:function(newValue){bValue=newValue;},get(){returnbValue;},set(newValue){bValue=newValue;},enumerable:true,configurable:true});定义对多个属性使用Object.defineProperties方法。varobj={};Object.defineProperties(obj,{'property1':{value:true,writable:true},'property2':{value:'Hello',writable:false}});问题四:使用中如何组合?答:比如vue有一个属性number。当数字发生变化时,我们通过setter监听变化,将最新的innerHTML赋值给对应的节点,这样简单的数据变化就可以驱动视图更新。