Показать сообщение отдельно
  #1 (permalink)  
Старый 07.06.2019, 10:26
Кандидат Javascript-наук
Отправить личное сообщение для dpts Посмотреть профиль Найти все сообщения от dpts
 
Регистрация: 12.05.2015
Сообщений: 111

Vue JS странность
Приветствую. Может кто-нибудь подскажет где собака порылась.

Имеем допустим функцию:
function test(str){
	console.log(str);
	var pattern = /^\+\d{11}$/g;
	if (str.length > 12){
		str=str.substr(0,12);
	}
	console.log(str);
	console.log(pattern.test(str));
	return pattern.test(str);
}

если ей скормить +12345678901 или +123456789011 она вернет true

Пытаюсь завернуть ее в VUE.JS:

var vm = new Vue({
	el: '#app',
	data () {
		v:'+12345678901',
		max: 12,
		pattern: /^\+\d{11}$/g
	},
	computed:{
		valid: function(){
			if (this.v.length > this.max){
				this.v = this.v.substr(0,this.max);
			}
			return this.pattern.test(this.v);
		}
	},
	watch:{
		v: function(){
			if (this.v.length > this.max){
				this.v = this.v.substr(0,this.max);
			}
		}
	}
});


если в VUE dev tools меняю v на +123456789011, последняя единица отрезается, что логично, но valid стает false.
Тут-же еще раз меняю v на +123456789011, последняя единица отрезается и valid стает true.
и так по кругу. То-есть при заворачивании функции в vue регекспов .test() начинает срабатывать через раз.

При этом, если из функции, формирующей valid убрать проверку на количество символов
if (this.v.length > this.max){
	this.v = this.v.substr(0,this.max);
}

То все срабатывает как надо, с первого раза.
Но так уж вышло, что мне эта проверка нужна именно там.

Может быть может кто-то объяснить почему так, где собака порылась и как исправить, чтобы с первого раза срабатывало?

Последний раз редактировалось dpts, 07.06.2019 в 10:39.
Ответить с цитированием