regularjs/regular

求个过滤器的思路

Closed this issue · 5 comments

是这样的,控制input框,只能是数字(包括小数),然后不能是负数。这个逻辑我实现了

但是有一个问题,涉及到计算的。。比如说a,b,c三个model。

给c加上number(我自定义)的过滤器,然后c是

c = a - b

导致c有可能出现负数。

那我定的过滤器里面是这样处理的,用正则判断是不是符合条件,不符合直接把最后一位给去掉,比如输入:

61a

变成“61”,因为手输的,肯定可以这样来搞。那么这样计算就有问题了,比如说结果是:-2,

那最终会变成“-”。

就结果来说,要么是变成“-2”,要么变成0,但是变成-2的话,也就是说我不要这个过滤器,或者换个过滤器(因为这个计算的input还是可以输入的,在输的时候还是要做校验,不能输字母什么)。

或者我判断,当第一个为“-”时,直接返回value,这样是否合理?但这样一来的话,输入控制里面也允许输入“-”了,难道写两个过滤器吗?

想问的是,这种情况一般是怎样处理比较好?

这个问题是不是regular本身无关,属于那种有 计算属性和过滤器 概念的框架都可以问的问题

这感觉就像是找波神帮你做需求的,平时都不敢打扰波神的悄悄路过...

另外上面提到的61a -> 61那么这样计算就有问题了-2 -> -,没看明白这里变成-和计算有什么关系

那么这样计算就有问题了,比如说结果是:-2
就结果来说,要么是变成“-2”,要么变成0

这两处提到的结果是一个东西么?感觉你前一个"结果"是指过滤器处理前的值,后一个"结果"说的是过滤器处理后的值

我对你问题的理解是:
c依赖a-b,但我需要给c加过滤器,保证c的值是非负数,同时c可以由用户输入,这样的过滤器该怎么写,是这样理解么?

如果理解错了,希望能提供下demo,说明下你预期发生的结果和现在发生的结果

@fengzilong ,过滤器我能写,我更多的是想了解一下类似的需求你们是怎样处理的。。

比如说只能输入数字,那假设是:12345,我假如在中间3前面加了一个a,那是直接把a replace为空吗?还是怎样处理?

在我的实际需求里面有两个部分,1是输入,2是计算。。有些计算也是可以输入的。但这个输入我要保证它必须大于等于0,然而从计算的层面上来说,他最终的值可能会是负数。

可能我问的更多的不是技术层面上的,而是需求处理上的。让你见笑了。

@henryzp 如果你的需求描述清楚我是乐于帮忙的,你上面一开始的描述我真的是花了半个多小时去看才大概了解了

  • 如果遇到"12a3"这种,我个人一般是直接parseInt的,这个其实你得问问你们的产品想要什么样的结果
  • 计算字段的结果可能小于0这个,同样应该问产品,因为他定义了c=a-b,那么a-b小于0的情况产品也应该考虑到

这个issue我先关闭了~

@fengzilong ,抱歉哈。。

对于另外一个watch的bug,真的不是bug吗?

对于波神的回答,我看不懂他说的一开始undefined,因为假设3个model,a、b、c,都给了初始值,然后我在外面用$watch a和b,然后c = a + b

问题在于我先操作c这个输入框,它会执行全部的$watch函数,导致第一次赋值不成功。

这个我应该描述清楚了吧?

因为在我的需求里面,如果按波神说的写到config里面去,会导致“修改了c,保存,重渲染,c又会计算了,而不是用户填入的”。这里也要考虑c修改了,然后a或者b又修改了,那么c会重新计算。

我之前测试了一下vue,它的逻辑是这样的,在外面watch绑定了之后,我先改c的input,是不会触发$watch的。