当前位置: 首页 > Web前端 > vue.js

Vue知识体系进阶应用总结

时间:2023-03-31 19:21:04 vue.js

/*styleslightly*/作为前端三大框架之一,vue是前端开发者的必备技能。那么如何系统的学习和掌握vue呢?为此,我对知识体系做了一个简单的总结。请多多包涵,不足之处请指正。喜欢的话可以给个赞哦!本文主要讲述vue开发中的一些高级应用,希望对大家有所帮助。相关推荐总结Vue知识体系基础介绍Vue知识体系实战技巧总结如果plugin是对象,必须提供install方法。如果插件是一个函数,它将被用作安装方法。在调用install方法时,会将Vue作为参数传入。这个方法需要在调用newVue()之前调用。我们在使用插件或者第三方组件库的时候会使用到Vue.use方法,比如importiViewfrom'iview'Vue.use(iView)那么Vue.use到底是做什么的呢?我们看一下源码|(this._installedPlugins=[])if(installedPlugins.indexOf(plugin)>-1){returnthis}//附加参数constargs=toArray(arguments,1)args.unshift(this)if(typeofplugin.install==='function'){plugin.install.apply(plugin,args)}elseif(typeofplugin==='function'){plugin.apply(null,args)}installedPlugins.push(plugin)返回这个}}us从上面可以看出插件参数是一个函数或者一个对象类型。首先,Vue会在已安装的插件列表中寻找这个插件。如果没有,它将安装插件。如果是,它会跳出该函数,这样可以确保只使用该插件。安装一次。然后使用toArray方法将参数改成数组,然后判断插件的install属性是函数,还是插件本身是函数,最后执行plugin.install或plugin方法。举个例子举个实际例子1.写两个插件constPlugin1={install(a){console.log(a)}}functionPlugin2(b){console.log(b)}export{Plugin1,Plugin2}2.导入并使用这两个插件importVuefrom'vue'import{Plugin1,Plugin2}from'./plugins'Vue.use(Plugin1,'parameter1')Vue.use(Plugin2,'parameter2')在这点我们在运行项目代码的时候就可以使用上面两个插件了。Vue.mixin混入(mixins)提供了一种非常灵活的方式来在Vue组件中分发可重用的功能。混合对象可以包含任意组件选项。当组件使用mixin时,mixin的所有选项都将“混合”到组件自己的选项中。1.定义一个mixin.jsexportdefaultmixin{data(){return{name:'mixin'}},created(){console.log('mixin...',this.name);},mounted(){},methods:{//日期转换格式Date(dateTime,fmt='YYYY,MM,DD,HH:mm:ss'){if(!dateTime){return''}moment.locale('zh-CN')dateTime=moment(dateTime).format(fmt)returndateTime}}}2.在vue文件中使用mixinimport'@/mixin';//importmixinfileexportdefault{mixins:[mixin],//usagedata(){return{userName:"adimin",time:this.formatDate(newDate())//数据源data中的时间这个vue文件是通过引用mixin的方法}}}或者在main.js中全局使用,所有页面都可以使用importmixinfrom'./mixin'Vue.mixin(mixin)MergeOptions当组件和mixins有选项的时候同名,这些选项将以适当的方式“合并”。内部会递归合并数据对象,当发生冲突时,组件数据优先。同名的钩子函数会合并到一个数组中,所以都会被调用。mixin的钩子将在组件自己的钩子之前被调用。值为对象的选项,如方法、组件和指令,将被合并到同一个对象中。当两个对象的键名冲突时,取组件对象的键值对。Vue.extendVue.extend属于Vue的全局API。它使用基本的Vue构造函数,创建一个“子类”。参数是一个包含组件选项的对象。如下:

varProfile=Vue.extend({template:'

{{firstName}}{{lastName}}

',data:function(){return{firstName:'Walter',lastName:'White'}}})//创建一个Profile实例并将其附加到一个元素。newProfile().$mount('#app')应用示例我们经常使用Vue.extend来封装一些全局插件,比如toast、diolog等,我们以封装一个toast组件为例。1、编写组件根据传入类型(成功提示、失败提示、警告、加载、纯文本)判断弹窗类型,并设置弹窗消失的时间。/*styleslightly*/2.使用Vue.extend构造函数将toast组件挂载到vue实例importVuefrom'vue'从'./toast.vue'导入MainletToast=Vue.extend(Main)letinstanceconsttoast=function(options){options=options||{}instance=newToast({data:options})instance.vm=instance.$mount()document.body.appendChild(instance.vm.$el)returninstance.vm}导出默认toast3。在main.js中引入toastprice并挂载到vue原型上numbercannotbeempty'})this.$toast({msg:'SuccessPrompt',type:'success'})Vue.extend和Vue.component的区别是需要先注册组件,然后再使用模板中注册的标签名,实现组件的使用。Vue.extend是编程的写作风格。控制组件是否显示,需要在父组件中传入一个state来控制或者在组件外使用v-if/v-show来实现控制,而Vue.extend的显示是手动挂起组件加载和销毁。Vue.directive注册或获取全局指令。指令定义函数提供了几个钩子函数(可选):bind:只调用一次,当指令第一次绑定到元素上时,可以定义一个初始化动作,绑定时只执行一次。inserted:绑定元素插入到父节点时调用(如果父节点存在,则可以调用,不一定存在于文档中)。update:绑定元素所在模板更新时调用,不管绑定值是否变化。通过比较更新前后的绑定值。componentUpdated:当绑定元素所在的模板完成一个更新周期时调用。unbind:仅在指令与元素解除绑定时调用一次。应用示例下面封装了一个复制粘贴文本的例子。1.写命令copy.jsconstvCopy={bind(el,{value}){el.$value=value//使用一个全局属性来存储传入的值el.handler=()=>{if(!el.$value){alert('Nocopycontent')return}//动态创建textarea标签consttextarea=document.createElement('textarea')//设置textarea为readonly,防止iOS下自动激活键盘,并设置textarea移出可见区域textarea.readOnly='readonly'textarea.style.position='absolute'textarea.style.left='-9999px'//将要复制的值赋值给的value属性textarea标签textarea.value=el.$value//将textarea插入正文document.body.appendChild(textarea)//选择值并复制textarea.select()//textarea.setSelectionRange(0,textarea.value.length);constresult=document.execCommand('Copy')if(result){alert('Copysuccessful')}document.body.removeChild(textarea)}//绑定点击事件,也就是所谓的一键复制el.addEventListener('click',el.handler)},//传入的值更新时触发componentUpdated(el,{value}){el.$value=value},//当指令与元素解除绑定时,移除事件绑定unbind(el){el.removeEventListener('click',el.handler)}}exportdefaultvCopy2、注册指令importcopyfrom'./copy'//自定义指令constdirectives={copy}//这种写法可以批量注册指令exportdefault{install(Vue){Object.keys(directives).forEach((key)=>{Vue.directive(key,directives[key])})}}3.importVuefrom'vue'importDirectivesfrom'./JS/directives'Vue.use(Directives)inmain.js你可以在项目中直接使用vCopy命令推荐文章从头开始??构建webpack项目总结几种webpack打包优化方法总结前端性能优化方法几种常见的JS递归算法封装一个toast和dialog组件并发布到npm阅读我的文章公众号谁关注前端路由,后端路由,单页application,多页应用谈JavaScript防抖节流,不定期分享前端知识,与你共同进步!

猜你喜欢