需求



使用iview,在提交时对值b进行验证,使其不能大于值a

实现

    <Form
ref="config"
:model="config"
:rules="configRules"
label-position="right"
inline
>
<FormItem prop="a" label="值a:" :label-width="86">
<i-input v-model="config.a"></i-input>
</FormItem>
<FormItem prop="b" label="值b:" :label-width="100">
<i-input v-model="config.b"></i-input>
</FormItem>
<FormItem :label-width="20">
<Button type="primary" @click="putConfig">提交</Button>
</FormItem>
</Form>
export default {
name: "Config",
data() {
return {
config: {
a: undefined,
b: undefined
},
configRules: {
b: [
{
trigger: "blur",
validator(rule, value, callback) {
console.log(this);
if (Number(value) > Number(this.config.a)) {
return callback(new Error("值b不能超过值a"));
}
return callback();
}
}
]
}
};
},
}

问题以及原因

此时,validator验证函数中this.config.a根本取不到值。

通过打印this,发现此时this没有指向vue实例,

而是指向调用validator函数的对象,iview这里会用一个验证相关的对象,长这样



而这个对象中并没有config.a。

这里根本原因是普通函数中的this会指向调用时的函数作用域上,这里validator函数是被这个验证对象调用的,所以this指向了它

解决办法

将validator使用箭头函数的形式:

            validator: (rule, value, callback) => {
console.log(this);
if (Number(value) > Number(this.config.a)) {
return callback(new Error("值b不能超过值a"));
}
return callback();
}

箭头函数本身是没有this的,它的this是包含箭头函数的第一个普通函数中的this;

如果箭头函数没有被普通函数包含,那么它的this会指向到定义时的作用域上;

这里指向了当前vue实例,从而能够正确获取this.config.a

总结

这里通过阅读资料总结了一下关于this指向的情况:

  • 箭头函数本身是没有this的,它的this是包含箭头函数的第一个普通函数中的this;
  • 如果箭头函数没有被普通函数包含,那么它的this会指向到定义时的作用域上;
  • 而普通函数中的this会指向调用时的函数作用域上;

ps: 由于对指针理解的并不是很透彻,可能有总结不对的地方,欢迎指正~

vue中使用iview表单验证时this指针问题的更多相关文章

  1. Vue如何使用vee-validate表单验证

    Vue项目遇到要表单验证了吧,对我来说表单验证是个很纠(dan)结(teng)的内容,各种判断凌乱到飞起.往常使用jquery的validate插件做表单验证方便吧,你也可以在Vue里引入jquery ...

  2. AngularJS中使用的表单验证

    Reference: http://www.tuicool.com/articles/2Qbiqi 客户端表单验证是AngularJS里面最酷的功能之一. AngularJS表单验证可以让你从一开始就 ...

  3. iview表单验证下拉框不通过问题

    iview表单验证的步骤: 第一步:给 Form 设置属性 rules :rules 第二步:同时给需要验证的每个 FormItem 设置属性 prop 指向对应字段即可 prop=”“ 第三步:注意 ...

  4. Laravel在进行表单验证时,错误信息未返回

    马上要毕业了,找了现在的这家公司,压力不大,自己也比较喜欢,唯一的遗憾就是手机号莫得换了(找不到换的借口). 进入正题: 之前自己的博客(http://lxiaoke.cn)是用ThinkPHP开发的 ...

  5. iview表单验证之正则验证、函数验证

    iview表单验证之正则 正则验证: 代码: loginRules: { stringLength: [ { required: true, message: '该字段不能为空', trigger: ...

  6. (转)AngularJS中使用的表单验证

    原文  http://www.cnblogs.com/woshinidezhu/p/Form-validation-with-AngularJS.html 客户端表单验证是AngularJS里面最酷的 ...

  7. iview表单验证不生效问题注意点

    按照iview官网介绍写的form表单验证,但是无论填写与否都不进行校验,找了很久的原因,突然才发现一个关键的地方,一定要加props!!! https://blog.csdn.net/xuaner8 ...

  8. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

        方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加 ...

  9. Vue 使用 vuelidate 实现表单验证

    表单验证的应用场景十分广泛,因为网站对用户输入内容的限制是非常必要的. 在vue中,我们使用vuelidate方便地实现表单验证. 官方文档在这里https://monterail.github.io ...

随机推荐

  1. Python基础教程(020)--集成开发环境IDE简介--Pycharm

    前言 学会掌握Pycharm工具 内容 集成了开发软件需要的所有工具 1,图形用户界面 2,代码编译器(支持代码补全,自动缩进) 3,编译器,解释器 4,调试器(断点,单步执行) Pycharm介绍 ...

  2. 某些 UI效果 实现思路

    一.日历组件: https://blog.csdn.net/amork/article/details/7257212 二.瀑布流 三.轮播图:轮播图已经用的很多了,结构也简单就不去将了. 四.分页组 ...

  3. Houdini学习笔记——【案例二】消散文字制作

    [案例二]Houdini消散文字制作 一.Overview     文字通过时间轴中frame变化而碎裂从两边开始向着中间消散并向镜头移动. 效果 二.Sop(Surface OPerators or ...

  4. centos7.4 搭建lnmp

    系统:阿里云 centos7.4 Php:PHP 7.1.13 (cli) Mysql:mysql5.7 Nginx:nginx/1.12.2 一.更新centos7 yum源 cp /etc/yum ...

  5. error C2065: ‘__in’ : undeclared identifier

    转自VC错误:http://www.vcerror.com/?p=1307 问题描述: 编译时出现: error C2065: '__in' : undeclared identifier error ...

  6. mysql 查昨天前天上个月数据

    主要使用到DATE_SUB()函数作用:从DATE或DATETIME值中减去时间值(或间隔). 语法:DATE_SUB(start_date, INTERVAL expr unit); 参数详解: s ...

  7. R语言利用ROCR评测模型的预测能力

    R语言利用ROCR评测模型的预测能力 说明 受试者工作特征曲线(ROC),这是一种常用的二元分类系统性能展示图形,在曲线上分别标注了不同切点的真正率与假正率.我们通常会基于ROC曲线计算处于曲线下方的 ...

  8. Egyptian Collegiate Programming Contest 2017 (ACM ECPC 2017) - original tests edition

    题目链接:https://codeforces.com/gym/101856 D. Dream Team 题意:n个点,让你连边成为一棵树,边权为顶点的GCD(u,v).求所有边权和的最大值. 思路: ...

  9. HTML 列表中的dl,dt,dd,ul,li,ol区别

    1.无序列表 无序列表是一个项目的列表,此列项目使用粗体圆点(典型的小黑圆圈)进行标记. 无序列表始于 <ul> 标签.每个列表项始于 <li>. 2.有序列表 同样,有序列表 ...

  10. Codesys 使用共享内存 打通通讯

    Codesys V3.5 平台   提供了库SysShm,其中包含了共享内存操作的接口函数: SysSharedMemoryClose; SysSharedMemoryCreate; SysShare ...