@boga-net

Как во Vue в одном объекте внутри data, сослаться на другой объект в data?

Здравствуйте. Почему я не могу в каком-либо объекте в data сослаться на другой объект в том же data ?

let item4 = 'Какой-то текст';
let item5 = [1, 2, 3, 4, 5];
let item6 = {
  name: 'Trololo',
  age: '111'
};

new Vue ({
  el: '#app',
  data: {
    item1: 100,
    item2: [1, 2, 3, 4, 5],
    item3: 'Some text',
    items: [
      { name: 'Item 0', amount: 666 },
      { name: 'Item 1', amount: this.item1 }, // Пусто 
      { name: 'Item 2', amount: this.item2.length }, // TypeError: this.item2 is undefined
      { name: 'Item 3', amount: this.item3 }, // Пусто 
      { name: 'Item 4', amount: item4 },
      { name: 'Item 5', amount: item5.length },
      { name: 'Item 5', amount: item6 },
      { name: 'Item 5', amount: 'Name: ' + item6.name + ' | ' + 'Age: ' + item6.age },
    ],
  },
  methods: {
    consoleLog1() {
      console.log( this.item2.length );
    },
    consoleLog2() {
      console.log( this.item2 );
    },
  }
});


в
{ name: 'Item 1', amount: this.item1.length }
и
{ name: 'Item 2', amount: this.item2 }

не могу обратиться к объектам item1 и item2 соответственно.
Но в методах могу обратиться тем же способом. И могу обращаться к переменным вне объекта data
и могу получить объект, массив или длину массива

Вот HTML разметка, на всякий случай, как я вызываю методы
<table>
    <tr v-for="item in items">
      <td>{{ item.name }}</td>
      <td>{{ item.amount }}</td>
      <td v-on:click="consoleLog1">sonsole log 1</td>
      <td v-on:click="consoleLog2">sonsole log 2</td>
    </tr>
  </table>
  • Вопрос задан
  • 1864 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
ты создаешь объект, и this тут указывает на текущий контент. Самого компонента то еще нет.
Попоробуй посмотри что будет, если
const obj = {
  a: 1,
  b: this,
  с: this.a,
}


А то, что ты хочешь присвоить, надо делать в хуке created, когда $data уже будет определено.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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