Vue作为组件在前端项目中的应用技巧
时间:2023-03-29 17:56:38
PHP
为什么要用vue是因为现有的前端项目中JS的使用太混乱了,有很多重复调用和代码冲突(同一段代码可能bein10differentplaces)已经写到当它被触发时,管理起来极其困难),所以我意识到以前完全依赖DOM操作的方法是有问题的,我应该切换到基于数据的。因此,我考虑将前端的一些功能抽象出来,使其成为一个通用的组件,可以在任何地方方便地调用,并且具有扩展性和易用性。vue的优点1.完整的中文文档2.简单易用3.体积小(仅<50kb)4.基于组件的开发方式5.优秀的代码可读性和可维护性预期实现方式前后端代码分离,组件的vue模板代码不会出现在php模板中,只是定义了特定的标签,加载特定的JS文件实现组件加载,使其成为可插拔组件。通过$mount方法将vue对象挂载到某个ID的dom节点//hideLogin可以作为参数之一用于控制登录弹窗
varLoginComponent=require('loginForm.js');varVue=require('vue');varloginForm=require('loginForm.vue');varlogin=exports;varform;/***初始化登录组件*/login.loadLoginForm=function(){if(form){return;}form=newVue(loginForm);form.$mount('#loginForm');};登录组件+业务调用Vue.set()数据传递业务回调https://segmentfault.com/a/11...弹出控制组件组件与父子组件,组件通信,内部生命周期pop.jsvarVue=require('vue');varpop=require('pop.vue');newVue({el:'#pop',render:function(h){returnh(pop)}});pop.vue//父组件
//使用listenPop="closePopMsg"监听子组件close的行为pop//使用:showUrl="showUrl"给子组件传值需要指定子组件Definition//props:{showUrl:showUrl}接受传递的值 script>//加载子组件varpopA=require('popA.vue');varpopB=require('popB.vue');module.exports={data:function(){return{showA:false,showB:false,showMask:false,showUrl:''stack:[]//定义一个stack来存放pop顺序和流}},components:{//es6在定义components时的简写语法糖就是key:value一致而不用写入密钥popA:popA,popB:popB},methods:{clickMask:function(){//console.log('click_mask');},checkShowA:function(){if(!this.checkShow()){返回;}this.stack.push('showA');},checkShowB:function(){this.stack.push('showB');},//showpoptryPop:function(){if(this.stack.length>0){varkey=this.stack.pop();这个[键]=真;this.showMask=true;}else{this.showMask=false;}},closePopMsg:function(type){if(type==1){this.tryPop()}}},created:function(){this.checkShowA();这个.checkShowB();这个.tryPop();}};子组件(popA.vue)设置方法给父组件方法传值:{closeMsg:function(type){this.$emit("listenPop",type);}}城市选择组件listenerwatch:当你需要在数据变化时执行异步或昂贵的操作时,这个方法是最有用的过滤器filter//watch方法监听对象,当数据变化时,触发函数watch:{list:函数(val){this.doSm();},history:function(val){if(val){this.doSm();}}}//使用filter处理接口返回的数据constructUrl:function(list){varvm=this;返回列表。filter(function(item){if(if(vm.type=='1'){)returnitem['url']='javascript:;';})}相关知识点App安装版本受webpack影响取决于关于item原因是babel不支持es6语法转换,所以只能用es5初始化,基础语法,属性绑定,数据绑定,事件绑定mountmount生命周期钩子(create,mount,update,destroy)组件和父子组件、组件通信、内部生命周期Vue.set()数据传输业务回调监听器watch:当数据变化时需要执行异步或昂贵的操作时,该方法是最有用的filter过滤器