需求



使用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. Angular JS - 3 - Angular JS 双向数据绑定

    一 .数据绑定 1. 数据绑定: 数据从一个地方A转移(传递)到另一个地方B, 而且这个操作由框架来完成2. 双向数据绑定: 数据可以从View(视图层)流向Model(模型,也就是数据), 也可以从 ...

  2. 2,Spring MVC 学习总结(二)- 方法(Action)参数映射

    一,Controller层方法(Action)参数映射 1,自动参数映射 1.1,基本数据类型参数映射 方法的参数可以是任意基本数据类型,如果方法参数名与http中请求的参数名称相同时会进行自动映射. ...

  3. Codeforces 831C--Jury Marks (思维)

    题目链接:http://codeforces.com/problemset/problem/831/C 题意:有一位参赛选手,我们不知道他初始或最后的成绩,但是知道k次评审所加(减)的分数,以及n个在 ...

  4. 109、TensorFlow计算张量的值

    # 当计算图创建成功时 # 你就可以运行这个计算图,然后生成一个新的张量 # 并且得到这个张量指向的计算图中具体的数值 #这个功能在debug的时候非常有必要 #最简单获得张量具体值的方法是使用Ten ...

  5. QTP-创建一个word文件

    '创建word实例 Set oWordApp = CreateObject("Word.Application") oWordApp.Visible =True '添加一个word ...

  6. c++全局变量,局部变量,内存布局,默认初始化

    全局变量 定义在所有函数之外的变量,main函数之内的变量也是局部变量,Globle variable  未显示初始化时执行默认初始化 局部变量 定义在函数之内的变量,Local variable 未 ...

  7. do_mmap解读

    1: unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, 2: unsigned long len, unsigned ...

  8. QTP调用.net Framework类库实例

    1. 日期时间格式处理 set oDate = DotNetFactory.CreateInstance("System.DateTime").Parse("2-18-2 ...

  9. String的replace导致内存溢出

    从一次内存溢出来看JDK的String应该怎么用 背景 JDK在String类中给我们提供的API,replace是个使用频率很高的的方法.因为他可以对字符串内容进行替换,只需要输入替换字符串和被替换 ...

  10. git 上传本地代码

    新增本地代码到远程库 http://blog.csdn.net/hanhailong726188/article/details/46738929 github配置教程 http://www.runo ...