vue-2.3自定义全局与私有指令

<!DOCTYPEhtml><htmllang="en"xmlns:v-bind="http://www.w3.org/1999/xhtml"xmlns:v-on="http://www.w3.org/1999/xhtml"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Document</title><scriptsrc="../lib/vue.min.js"></script><linkrel="stylesheet"href="../lib/bootstrap.min.css"></head><body><divid="app"><divclass="pa...

vue-2.2过滤器的使用与时间格式化

<script>//添加全局过滤器,进行时间格式化Vue.filter('dateFormat',function(dateStr,pattern=''){//根据给定的时间字符串,得到特定的时间vardt=newDate(dateStr)//yyyy-mm-ddvary=dt.getFullYear()varm=(dt.getMonth()+1).toString().padStart(2,'0')vard=dt.getDate().toString().padStart(2,'0')//returny+'-'+m+'-'+''d//return`${y}-${m}-${d}`if(pattern.toLowerCase()==='yyyy-mm-dd'){return`${y}-${m}-${d}`}else{varhh=dt.getHours().toString().padStart(2,'0')varmm=dt.getMinutes().toString().padStart(2,'0')varss=dt.getSeconds().toString().padSt...

vue-2.1-品牌案例的添加、删除、和搜索功能

<head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Document</title><scriptsrc="../lib/vue.min.js"></script><linkrel="stylesheet"href="../lib/bootstrap.min.css"><!--https://files.cnblogs.com/files/cgy-home/bootstrap.min.css--></head><body><divid="app"><divclass="panelpanel-primary"><divclass="panel-heading">&...

vue-01-插值表达式、事件修饰符

<!DOCTYPEhtml><htmllang="en"xmlns:v-bind="http://www.w3.org/1999/xhtml"xmlns:v-on="http://www.w3.org/1999/xhtml"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Document</title><!--1.导入Vue包下载地址:https://files.cnblogs.com/files/cgy-home/vue.min.js--><scriptsrc="../lib/vue.min.js"></script></head><body><!--2.创建一个要控制的...

vue 父组件动态传值给子组件的方法

父组件:<uni-collapse-itemtitle="标题信息"ref="child1"thumb="../../static/send-goods.png"></uni-collapse-item>this.$refs.child1.childMethod(count)//调用子组件的函数,并把这个状态传过去。如果在v-for循环中:that.$refs.child[index].childMethod(count)  子组件: data(){return{childVal:''}},methods:{childMethod(flag){//这个就是子组件的函数参数是父组件调用时传过来的     this.childVal=flag;//将这个状态赋给当前的对话框所绑定data数据上  }}   ...

html a标签 图片边框和点击后虚线框的有关问题

htmla标签图片边框和点击后虚线框的问题一直在在chrome上开发自己的项目,今天上ie和firefix一看,真丑,a标签在使用图片时,多加了蓝色的边框,并且点击后所有a标签都会出现一个虚线框,但是chrome中一直没发现这个问题,所以为了兼容性,还是在css中追加了做这个处理的式样进去:去边框的方法,img标签增加属性:  border='0'去点击后的虚线的方法,a标签增加属性:  outline:none;另外,去掉超链接的下划线的方法:  text-decoration:none; ...

记录Vue和Jquery混合开发中关于点击事件的一个bug

最近比较急的接手了公司的微信服务号项目,采用的技术栈主要是jq和vue。在项目中之前碰见过jq写的$().on('click',function(){})点击事件不起作用,只能写在vue实例中的methods中,然后用@click去监测。一直困惑的是这个BUG在不同的页面中有时有,有时没有,而且出现的情况很少。今天工作闲了一点,于是乎专心去琢磨这个问题。网上百度到的解决方案是这样的,如下图:于是乎自己试了一下确实可以。代码如下图:但是回过头来看项目就很奇怪,说的写在JQ的dom加载完成函数中就可以,但是我的具体项目中为什么不行呢?而其他页面的却可以呢?于是乎开始从繁至简的减少代码,想要减少的如上,页面也简化。jq写的点击事件就是如下的‘伙伴详情’这一列是v-for生成的,当把dataList直接改为数字后,点击是可以生效的,于是开始考虑是dom渲染问题,之前也这样猜想过,但没有过去验证到底是哪块的问题。如果dataList是请求后端数据生成的,那可能是时间差上有问题。于是我在vue实例中的$this.nextTick中和jq点击事件前分别打印时间。得到如下图:显...

Vue Elementui 如何让输入框每次自动聚焦

在项目优化中碰到一个小问题,在每次提示框显示的时候让提示框中的输入框聚焦。如下图。一般情况下提示框是隐藏的。点击了编辑才会弹出。 那么原生属性autofocus只在模板加载完成时起作用,也就是说只有第一次有用。然后尝试了ref,再this.$refs.el也不能成功拿到该元素,因为饿了么组件封装的<el-input>对应的是外面一个div,里面包了个input,在获取元素的时候有问题的。第二种尝试,利用class或者id获取元素,然后再手动聚焦el.focus(),好像也不起作用。然后查看文档决定用,diretives自定义指令,然而还是怎么弄都没用。最后又是网上各种查,才明白,inserted只在元素插入的时候才有用,然而饿了么组件中提示框的隐藏显示是v-show原来。没办法最后只能把<el-input>替换掉,换成原生标签input,样式上直接class复制一下之前的样式吧。v-if与提示框的v-show的值绑定在一起,这样就轻松实现啦!总结反思,对vue的自定义指令原理不熟悉,对饿了么组件的封装原理也不是十分明白。总觉得还有更简单的方法,希望大佬...

vue中数据双向绑定的实现原理

vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下。首先大致学习了解下Object.defineProperty()这个东东吧!*Object.defineProperty()*对对象的属性进行定义/修改**/letobj={x:10}//这两种方式都相对来说比较简单,直接,但是有些时候我们需要对对象的属性的修改和增加进行必要的干预//obj.y=20;//obj.x=100;//obj.x='abc';////letarr=[1,2,3];//arr.length='abc';//不可更改//console.log(arr);//console.log(obj.x);//deleteobj.x;//console.log(obj);Object.defineProperty(obj,'y',{configurable:false,//设置是否可删除false为不可删除value:100});console.log(obj);deleteobj.y;//删除console.log(obj);//设置对象某个属性值的时候,顺便设置它的...

vue中的$on,$emit,$once,$off源码实现

这几种模式是基于订阅观察者模式的,维护一个事件中心,on的时候将事件按名称存在事件中心里,称之为订阅者,然后emit将对应的事件进行发布,去执行事件中心里的对应的监听器。第一步就是创建一个构造构造,维护一个事件中心eventsfunctionEventEmiter(){this.events={}}$on//event可以是事件名数组EventEmiter.prototype.on=function(event,cb){//多个事件if(eventinstanceofArray){event.forEach(fn=>this.on(fn,cb))}//单个事件if(this.events[event]){this.events[event].push(cb)}else{this.events[event]=[cb]}}$emit //cb参数:单个事件名,args参数this.emit('evt',a,b,c)EventEmiter.prototype.emit=function(event){letargs=Array.from(arguments).slice(1)...
代码星球 代码星球·2020-04-01

ont color='red'>vueont>登录插件引来的后续问题

上次介绍了下写的登录弹框插件,过了几天发现点击去注册或者改密码的跳转失效。报错this.$router.pushisnotafunction,继续打印this.$router也是undefined(可以先看一下上一篇博客提到的弹框登录插件)this.$router.push({path:'/register'})尝试了很久,试了三种方法。需要注意的是:登录弹框是通过this.$login调用方法来动态插入组件的,这个登录弹框不在路由的组件管理范围内。第一:引入子路由,需要加router-view但是这样是作为子路由的方式,给当前赋值了路由对象。页面会出现重叠。第二种:在main.js里把路由对象设为window对象下的某值然后再loginBod.ont color='red'>vueont>里调用。结果也能跳转。但是弹框还在,上面解释过了,路由切换卸载和动态加载不同的组件,但登录弹框是手动挂载上去的,所以需要手动去卸载。第三种:直接用window.replace路由router跳转的话,会根据路由对象动态的卸载挂载组件,所以弹框会保留。这种做法是提高性能减少消耗的。默认的路由哈希模式,是去操作哈希值重新定位路径,但是始终是由...

vue项目中的函数封装

项目中一般都会有fun.js这类的文件,里面有各种的如转换时间格式的,处理转换的等等函数方法。其实经常用到的去获取基本数据的接口也可以封装成一个方法,方便复用。如上面所标,获取列表数据之前需要先获取维护的规格选项以及对应的选项值的id集合来进行转换。而且用到这一块的地方还有很多,如商品列表,我的商品等等。关于异步的话,可以采取async await去做。比如:为了方便参数的命名,所以在await函数里resolve返回对应的规格集合。都知道await是返回一个promise函数来实现的。那么不用await的时候也是可以正常使用的。在这个fun.js里需要 importVuefrom'vue'  var_this=Vue.prototype; 方便使用全局的参数。总结:通过这样的方法,整个项目里很多地方需要调同样的参数的,就可以多处复用了,如果需要对数据做不同的梳理,也可以函数传参,然后再参数里去做对应的处理。 ...

vue中登录模块的插件封装

一个电商城的项目,场景是:在未登录的情况下点击收藏或者加入购物车等操作,执行一个方法如this.$login()来动态插入登录组件。第一步:写好关于这个登录弹窗的单文件组件loginBox.vue第二部:编写loginBox.js文件,输出一个函数方法,如下图关于$mount()需要注意 第三步:在Vue的prototype下全局赋值这样,在点击加入到购物车的时候,判断localstroage里有无用户信息。未登录则执行this.$login()方法,生成弹窗。当时在写的时候一个劲报错模板找不到。找了很久才找到解决办法:require('./loginBox.vue')后缀需要加.default。这样才能成功引入组件。是vue-loader的问题,有兴趣可以看看:https://github.com/vuejs/vue-loader/releases/tag/v13.0.0然后弹出组件后,需要禁止浏览器滚动。登录成功后销毁实例,在销毁实例前需要解决禁止浏览器滚动,所以在beforeDestory里进行事件解绑。销毁实例只是从虚拟dom中移除,元素在页面还是存在的,只不过是断开...

vue2.X心得

VUEJS学习网址:https://cn.vuejs.org/此文章是用来记录自己的学习和实践心得。关注点:父子组件之间的通信看图说话:PassProps子组件本身与父组件是孤立的,通过子组件中显示声明的props属性,接收父组件数据;父组件的数据更新时,子组件的prop会跟着更新;此数据流动是单向的(看着);EmitEvents子组件使用$.emit(fn)向外抛出自己的内部触发的事件;父组件是否监听?如果父组件需要监听,使用v-on绑定监听,触发对应事件;以上为通用语,具体分析子组件可以接收一个字符串,在子组件内部可以用{{label}}使用 <v-inputlabel="姓名"></v-input>子组件可以接收动态参数<inputv-model="msg"/><v-profile:message="msg"></v-profile>子组件接收到数据之后想处理一下不小心改了怎么办?给prop创建一个副本(建议深拷贝),处理副本,不动prop;父组件的数据改变后,子组件的prop会自动更新,但是这个prop的副本不会啊?使...
代码星球 代码星球·2020-04-01

初探css -11 Table表格

使用CSS可以使HTML表格更美观。CompanyContactCountryAlfredsFutterkisteMariaAndersGermanyBerglundssnabbköpChristinaBerglundSwedenCentrocomercialMoctezumaFranciscoChangMexicoErnstHandelRolandMendelAustriaIslandTradingHelenBennettUKKöniglichEssenPhilipCramerGermanyLaughingBacchusWinecellarsYoshiTannamuriCanadaMagazziniAlimentariRiunitiGiovanniRovelliItalyNorth/SouthSimonCrowtherUKParisspécialitésMarieBertrandFranceTheBigCheeseLizNixonUSAVaffeljernetPalleIbsenDenmark指定CSS表格边框,使用border属性。下...
代码星球 代码星球·2020-03-31
首页上一页...152153154155156...下一页尾页