VueJS2 и Lodash4: Как вложить v-for с другим v-for в таблицу HTML?

#vuejs2 #lodash

Вопрос:

У меня возникли проблемы с получением некоторых вычисленных данных для правильного отображения в моей HTML-таблице. Как я могу заменить содержимое x заполнителя в таблице значениями из моего filteredFieldsWithOldValues() метода?

Позвольте мне объяснить.

У меня есть некоторые данные, такие как:

Рабочая демонстрация Codesandbox: https://codesandbox.io/s/country-old-and-new-forked-s4zh7?file=/src/App.vue:51-599

 {
  "name": "Canada",
  "entryType": 2,
  "shortName": "CanadaEH",
  "shortName_old": "Canada",
  "fullName": "The NEW Republic of Canada",
  "fullName_old": "The Republic of Canada",
  "entryNotes": "Changed the short name and full name ",
  "entryNotes_old": "fixed typo on short name"
}
 

Используя lodash, я отфильтровываю поля, к которым _old добавлена строка, а также отфильтровываю некоторые дополнительные поля, которые я не хочу показывать в данных. В целом, это выглядит так:

 filteredFieldsWithNewValues() {
      const fieldsWithNoOldString = omitBy(this.country, (v, k) =>
        k.endsWith("_old")
      );
      const omittedFields = omit(fieldsWithNoOldString, [
        "updateStatus",
        "entryType",
        "name",
      ]);
      return omittedFields;
    },
 

Это работает нормально, и мои данные правильно отображаются в таблице HTML:

введите описание изображения здесь

Однако мне нужно заменить x заполнитель в таблице значениями из _old добавленных к ним ключей. Я пытался сделать это так:

     filteredFieldsWithOldValues() {
      const fieldsWithOld = pickBy(this.country, (v, k) => k.endsWith("_old"));
      return fieldsWithOld;
    },
 

А затем в моей HTML-таблице я поместил еще v-for <tr> один элемент «s», вот так:

 <td v-for="(x, index) in filteredFieldsWithOldValues" :key="index">
{{ x }}
</td>
 

Итак, обновленный HTML выглядит так:

     <table class="table">
      <thead>
        <tr>
          <th scope="col">Field</th>
          <th scope="col">Old</th>
          <th scope="col">New</th>
        </tr>
      </thead>
      <tbody>
        <tr
          v-for="(value, field, index) in filteredFieldsWithNewValues"
          :key="index"
        >
          <th scope="row">{{ field }}</th>
          <td v-for="(x, index) in filteredFieldsWithOldValues" :key="index">
            {{ x }}
          </td>
          <td>{{ value }}</td>
        </tr>
      </tbody>
    </table>
 

Но теперь в таблице неверно отображаются значения.

Как я могу правильно отображать значения из ключей с _old помощью правильно?

Ответ №1:

Попробуйте это

 <table class="table">
  <thead>
  <tr>
    <th scope="col">Field</th>
    <th scope="col">Old</th>
    <th scope="col">New</th>
  </tr>
  </thead>
  <tbody>
  <tr
    v-for="(value, field, index) in filteredFieldsWithNewValues"
    :key="index"
  >
    <th scope="row">{{ field }}</th>
    <td>{{ filteredFieldsWithOldValues[field   '_old'] }}</td>
    <td>{{ value }}</td>
  </tr>
  </tbody>
</table>
 

Комментарии:

1. фантастика!. Спасибо за помощь!