Загрузочный модуль форматирования пользовательских полей Vue — таблицы вызывается дважды, но не работает

#vue.js #bootstrap-vue

Вопрос:

У меня есть столик:

 lt;b-table striped hover :items="coursesArray" :fields="fields"gt;lt;/b-tablegt;  

Данные поступают из

 coursesArray: [  {  id: "1",  name: "foo",  teacherEmails: [{ 0: "sample1" }, { 1: "sample2" }, { 2: "sample3" }],  teacherIds: ["A1", "A2", "A3"],  }, ],  

А поля-это:

 fields: [  { key: "id", label: "Course ID" },  { key: "name", label: "Course Name" },  {  key: "teacherEmails",  label: "Teacher Email",  formatter: "teacherEmailTCellFormat",  },  { key: "teacherIds", label: "Teacher ID" }, ],  

И вот как это визуализируется без форматирования.

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

Итак, я добавил пользовательский форматер в поля, чтобы удалить скобки и фигурные скобки.
Первая проблема, с которой я сталкиваюсь, заключается в том, что перебор значений для возврата всех элементов teacherEmails не работает.

 teacherEmailTCellFormat(value) {  console.log(value)  value.forEach(item =gt; {  return each[0]  } }  

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

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

Любая помощь или разрешение будут оценены по достоинству.

Ответ №1:

Вам нужно вернуть массив, вы можете сделать это с помощью Array#map :

 new Vue({  el:"#app",  data: () =gt; ({  fields: [  { key: "id", label: "Course ID" },  { key: "name", label: "Course Name" },  { key: "teacherEmails", label: "Teacher Email", formatter: "teacherEmailTCellFormat" },  { key: "teacherIds", label: "Teacher ID" },  ],  coursesArray: [  {  id: "1",  name: "foo",  teacherEmails: [{ 0: "sample1" }, { 1: "sample2" }, { 2: "sample3" }],  teacherIds: ["A1", "A2", "A3"],  }  ]  }),  methods: {   teacherEmailTCellFormat(value) {  return value.map((item, i) =gt; item[i]);  }  } }); 
 lt;link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css"/gt; lt;link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css"/gt; lt;script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"gt;lt;/scriptgt; lt;script src="https://unpkg.com/babel-polyfill@latest/dist/polyfill.min.js"gt;lt;/scriptgt; lt;script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"gt;lt;/scriptgt;  lt;div id="app"gt;  lt;b-table striped hover :items="coursesArray" :fields="fields"gt;lt;/b-tablegt; lt;/divgt; 

Примечание: Я предположил, что ключ представляет индекс элемента в массиве, но вы можете изменить отображение по своему усмотрению. Главной проблемой было возвращение массива.

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

1. Это помогло, спасибо. Немного изменил форматирование, чтобы отобразить его без скобок, как это: let arr = value.map((item, i) =gt; item[i]); return arr.toString();

2. Но есть какие-нибудь идеи, почему форматер вызывается дважды? Это просто из любопытства.

3. Не уверен, что это было бы что-то внутреннее, использующее обратный вызов дважды.