手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

ElementUI form服务端验证

看到标题的时候,估计会很惊讶,服务端验证那不是很方便么,自定义一个rules,杀杀水就达到目标了。

事实上,我是在做一件偷懒的事情,毕竟大家都知道表单验证很多时候为了方便和节约性能,都是客户端先检验,然后再服务端检验,这样用户体验也好,但是在后台的时候,如果你要写两遍,那花的精力就大了。特别是elementUI的rules,还得写自定义的validateFunc,于是我就想着前端不校验,后端校验,然后把error回显到指定的元素上。
 
比如如果只是弹个窗,提个示,那谁都可以实现了,但如果你不能为指定元素做错误提示,那么在表单过多的情况下,用户也会很苦恼。如果表单有几十个,怎么破?
 
翻了一下elementui的form和form-item的源码,发现可以额外传递error进去。用来提示该元素出错了。error是一个string,组件中会watch,然后给validateStatus赋值error,给validateMessage赋值error对应的string。
 
于是,在submit的时候,发现有error时,可以直接this.errors = res.data.error;这时候相应的元素就会飘红。除了没有focus到第一个标红的元素上,其他一切OK
 
---
如果用的是step 表单,那要注意,如果要去不同的step,需要先设置step ,然后 在 this.$nextTick()中进行赋值。否则,页面出来了。变量会提前赋值,渲染出来的表单元素无法将error赋值进去。被这个折腾了一晚上。
 
---
用这个的好处是,只有提示,不会象他原来的rules会阻止下一步的进行。现在就感觉轻松多了。
本来是准备切到andtv的,结果 发现elementUI的2.15,把andtv中的几个额外的组件也加全了。比如description-item和 骨架屏。。确实666
 
----
再忍忍,现在还得用VUE2.。。。
 

Avoid mutating a prop directly since the value will be overwritten whenever the parent

 InertiaJS和VueNestable共用时,遇到的Avoid mutating a prop directly since the value will be overwritten whenever the parent.

因为在使用InertiaJS时,所有的变量都是通过props传递进去的。比如分类的数据。这时候用vue-nestable,就会出现上面的错误:[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: xxxx

因为xxxx变量是props传过来的。因此不能在子组件再通过组件来修改xxxx变量。要偷懒直接在data变量中定义一个中间变量,这时候就方便了。

data(){
    return {
        yyyy: this.xxxx
    }
}

然后vue-nestable的v-model可以直接用this.yyyy,报错信息解除。

-----

这个问题主要是出在inertiaJS上。毕竟其他完整的页面demo,变量都是当前页直接给出来的,所以就不会出错了,但遇到问题还是要看本质,才知道怎么改

Failed to decode downloaded font:

 用webpack打包的时候,页面的图标出不来了,比如:elementUI和fontawesome的图标,在console里出现:Failed to decode downloaded font:<URL>,网上查了大约有两种说法

1、springboot,需要在POM文件里加入对woff/eot等的文件的处理,然而我不是spring项目,所以就明显有问题

2、可能是打包的时候图标文件有问题,因为用webpack,可能就打的不是完整包(极有可能),所以用正常的覆盖一下。

我用方法2解决了。如果你遇到类似的问题,可以尝试一下。

咦,被white-space: nowrap;小坑了一把

 小程序文本限制行数其实是比较简单的,只要指定最大高度,然后overflow隐藏一下,但由于我之前为了去空格,加了个white-space:nowwrap,导致换行一直失败,也就是说怎么着都在一行里面,去掉就好了

小程序文字限定行数换行就这几行:

CSS代码
  1. .break{  
  2.     overflowhidden;  
  3.     word-break: break-all;  
  4.     text-overflow: ellipsis; //...显示  
  5.     display: -webkit-box;  //盒型
  6.     -webkit-box-orient: vertical;  
  7.     -webkit-line-clamp: 2;  //2行,这个最好配合一下元素的max-height和font-size,多试两下就OK了。
  8. }  

轻松搞定。

参考:

1、https://developer.mozilla.org/zh-CN/docs/Web/CSS/white-space,white-space CSS 属性是用来设置如何处理元素中的 空白 

 

 

webpack和laravel-mix的一点笔记

用了laravel之后,做网页好象不用laravel-mix总感觉缺了点什么,毕竟他能够帮你压缩JS和chunk文件。在以前,那得是用第三方库的,比如yahoo的工具等。这当然是后续的事情,但在开发的时候,常规做一个页面,刷新一下,其实也还是挺痛苦的。

直到后来,有了browsersync,嗯,这个插件laravel-mix内置了。如果要用,还是要npm install 一下的。browsersync唯一的问题,就是全量刷新。这个会有点痛苦而且明显页面会刷新一下。

再后来,看到了,还有laravel-mix用的webpack,其实还自带了一个hmr,嗯,看package.json的时候应该有注意到,有一个参数叫hot,运行的命令是mix watch --hot,平时的watch没有--hot参数。于是就想着利用它来折腾一下。

先说一下共同点和不同点

共同点:

1、都需要在页面里引入一个JS文件,不同的是browsersync引用的是自己的client.js,而webpack引用的还是app.js,只是另一个端口的罢了。

2、都是开启了一个新的程序,都利用了websocket,bs默认是3000,还有看UI结构的3001端口,而webpack默认开的是8080(8080,这个默认端口,哼哼,太容易被占用了。。。。。要注意一下)

3、BS和webpack都可以通过webpack.mix.js来修改端口和配置参数,hmr的话,要考虑跨域,bS则不需要,BS通过配置还可以将UI关闭,{ui:false},这样就不会默认开3001端口了,省点资源

不同点

1、browser-sync要npm install安装,webpack是内置的

2、bs默认是更改后直接refresh,而Webpack是看起来的局部刷新。如果是主项目,input框中的内容都不会消失。这个在测试的时候其实也挺重要(如果是子项目,则还是会消失,但页面并没有刷新)

3、命令:bs用yarn watch 就行了,webpack的要用yarn hot (基于laravel-mix的情况下)

----

其实可能还有更多的异同点,但目前对我来说可见的、一下子想起来的其实就这些(后续想到再补上)。