Сообщение от Aetae
			 
		
	 | 
	
		С точки зрения парадигмы всё сказали.  
А теперь с технической точки зрения: computed не вычисляется каждый раз. В vue хитрая система кэширования. Если vue считает, что ничего не поменялось - оно вернёт последнее значение.  
Также все свойства в data на самом деле (для реактивности) заменяются на геттеры с сеттерами, а потому this.v = 'что-то' - это не прямое назначение, а вызов vue логики. Соответственно может что-то поломаться и на этом этапе от неправильного подхода. 
 
Короче, вместо хаков делайте по человечески и будет вам счастье.)
	 | 
	
Отличный совет. Покажите пожалуйста как по человечески?
Отойдем немного от логики VUE и перепишем метод vtReturn из примера с компонентом:
vtReturn:function(str){
	var res={
		valid:Boolean,
		value:''
	};
	if (str.length > this.max){
		str = str.substr(0,this.max);
	}
	res.valid = this.pattern.test(str);
	res.value = str;
	this.res = res;
	return res;
}
Теперь он в принципе не берет ничего из data для изменения, только пишет туда уже измененное.
С тем же результатом как и раньше.
Я же спрашиваю и прошу пояснений не от того, что я сверхмастер JS, а совсем наоборот.