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

Сообщение от 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, а совсем наоборот.

Последний раз редактировалось dpts, 17.06.2019 в 09:20.
Ответить с цитированием