Vue: массив обновляется только на консоли, а не на экране - PullRequest
0 голосов
/ 28 июня 2019

Я все еще изучаю основы Vue.У меня есть разные элементы в одном компоненте, которые должны быть назначены во втором компоненте.Когда я использую console.log, массив отображается правильно, но когда я хочу показать массив динамически в шаблоне, он все равно является значением по умолчанию.Что я делаю не так?

Компонент один:

    <template>
    <div>
{{nr}}
{{containertyp}}
      <button  @click="click(0)"></button>
</div>
     </template>

У меня есть еще много кнопок с различными параметрами, просто чтобы сделать их здесь короче.

export default: {
data: function {
return {
nr: [],
containertyp: [],
    }
    }
methods: {
  click(number) {

    for (var i = 0; i < 27; i++) {
      this.nr[i] = false;
      if (number == i) {
        this.nr[i] = true;
      }
    };

    EventBus.$emit('containerclicked');

  }
},
created: function() {
  let i;
  //default
  for (i = 0; i < 27; i++) {
    this.nr[i] = false; 
  }
  for (var index = 0; index < 27; index++) {
    this.containertyp[index] = 'bs';
  }
},
mounted() {

  const self = this
  EventBus.$on('containertypchosen', function (containertyp) {
    for (let j = 0; j < 27; j++) {
      if (self.nr[j] == true) {
        self.containertyp[j] = containertyp
      }
    }
  })

Компонентдва:

<template>
<div>
<button :disabled = "disabled == true"  v-on:click="chosetype('bs')" "> bs </button> <br />
</div>
</template>
export default: {
data: function() {
return {
disabled: true
}
}
     mounted () {
    const self = this
    EventBus.$on('containerclicked', function (){
      self.disabled = false

    })
  },
methods: {
chosetype: function (containertyp) {
      this.containertyp = containertyp
      EventBus.$emit('containertypchosen', containertyp)
    }

    }
}

1 Ответ

1 голос
/ 28 июня 2019

Вы не можете обновлять массивы, используя индексы, изменения не будут обнаружены системой реактивности.

https://vuejs.org/v2/guide/list.html#Caveats

Так, например, это не будет работать:

this.nr[i] = true;

Вместо этого вам нужно будет использовать Vue.set или псевдоним vm.$set:

this.$set(this.nr, i, true);

Альтернативой может быть создание нового массива и его замена this.nr полностью, т.е. this.nr = newArray.

Вам нужно будет вносить аналогичные изменения везде, где вы обновляете массив по индексу.Существуют обновления как для nr, так и containertyp, которые в настоящее время имеют эту проблему.

Из вашего кода не сразу понятно, должен ли nr быть массивом.Кажется, что все значения равны false, кроме одного, поэтому вам может быть лучше просто держать индекс значения true вместо использования массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...