Вычисленное свойство неправильно ссылается на » это » при попытке добавить класс в зависимости от длины символа в Vue

#javascript #vue.js

Вопрос:

Мне просто нужна помощь в определении причины, по которой я получаю ошибку в своем вычисляемом свойстве. Ошибка в том, что:

 Error in render: "TypeError: Cannot read property 'length' of undefined"  

Я предполагаю, что, когда я просматриваю activeConnect.nodes, когда я ссылаюсь на этот.узел, он тоже не знает, на какой из них я ссылаюсь? Как мне исправить свой компьютер, чтобы сделать это правильно?

 lt;v-col  v-for="(node, index) in activeConnect.nodes"  :key="index"  gt;  lt;v-card  flex  @click="edit(node)"  gt;  lt;v-card-text  :class="nameClass"  text-no-wrap  v-text="node.content"  /gt;  lt;/v-cardgt;  lt;/v-colgt;  

Вычислено:

 computed: {  nameClass () {  if (this.node.content.length gt; 4) {  return 'name-small'  }  return 'name'  }  }  

SCSS:

 .name-small {  font-size: 12px !important; }  .name {  font-size: 20px !important; }  

Ответ №1:

Там нет this.node , node это местное название внутри v-for . Существует несколько вариантов решения этой проблемы.

nameClass может быть методом, который получает node в качестве параметра.

Часть шаблона, зависящая от node значения ( v-card ), может быть перемещена в отдельный компонент, который принимается node в качестве опоры и может быть nameClass вычислен.

Простой расчет, как в nameClass , может быть перенесен в шаблон.