alaskafx
@alaskafx
Не .do Frontend

Как работать во Vue в computed со сеттерами?

Сразу скажу: читал документацию, но я не понял до конца..

Значит..
Представим, что у меня есть компьютед:

selectedCarNumber: {
            get: function () {
                return 0
            },
            set: function (value) {
                // что писать, чтобы поменять значение у возвращаемого числа get ?
            }
        },


Как по идее должен работать сетттер?
Что-то вроде: а если я хочу поменять значение возвращаемого числа у get - как быть ?

Пожалуйста, объясните
  • Вопрос задан
  • 200 просмотров
Решения вопроса 2
yarkov
@yarkov Куратор тега Vue.js
Помог ответ? Отметь решением.
data() {
  return {
    number: 0
  };
},
selectedCarNumber: {
            get: function () {
                return this.number;
            },
            set: function (value) {
                this.number = value;
            }
        },
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега Vue.js
Сеттер должен изменить данные, которые используются в геттере.

Давайте рассмотрим на конкретном примере. Пусть есть массив объектов, на основе которых создаются чекбоксы:

data: () => ({
  items: [
    { checked: false, label: '...' },
    { checked: false, label: '...' },
    ...
  ],
}),

<label v-for="n in items">
  <input type="checkbox" v-model="n.checked">
  {{ n.label }}
</label>

И мы хотим сделать чекбокс, который позволял бы устанавливать или снимать все чекбоксы сразу. Его состояние будет описываться вычисляемым свойством. Геттер - очевидно, будет содержать проверку, что все чекбоксы установлены. А сеттер будет устанавливать переданное ему значение всем чекбоксам. Как-то так:

computed: {
  get() {
    return this.items.every(n => n.checked);
  },
  set(val) {
    this.items.forEach(n => n.checked = val);
  },
},

<label>
  <input type="checkbox" v-model="all">
  ALL
</label>

https://jsfiddle.net/j7hr68t4/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы