Vuejs: невозможно получить доступ к (вычисляемым) объектам в цикле вычисляемых свойств
Возможно, очевидный, но у меня есть компонент Vue Single File:
<template>
...
</template>
<script>
export default {
props: [ 'matches', 'results' ],
computed: {
formattedMatches: function () {
let rows = [];
this.matches.forEach(function($match, $i) {
rows[$i] = {
id: $i + 1,
title: $match[0] + ' ' + $match[1]
};
});
return rows;
},
formattedResults: function () {
let rows = [];
this.results.forEach(function($resultRow, $i) {
rows[$i] = {
id: $i + 1,
title: this.formattedMatches[$i]
// Error in render: "TypeError: Cannot read property 'formattedMatches' of undefined"
};
});
return rows;
},
...
</script>
Ошибка появляется также, если я пытаюсь с this.matches
не только с this.formattedMatches
, Я предполагаю, что это вопрос переменных областей в классах и методах, но я даже не знаю, есть ли другой лучший способ или шаблон для достижения того же поведения.
Есть идеи? Заранее спасибо.
2 ответа
this
имеет другой контекст в анонимной функции forEach
, Самое простое решение - использовать функцию обозначения стрелки.
this.results.forEach(($resultRow, $i) => {
rows[$i] = {
id: $i + 1,
title: this.formattedMatches[$i]
};
});
Нашел решение на основе этого другого решения на Stackru. Как говорится " this
внутри обратного вызова относится к самому обратному вызову (точнее, как указано, контексту выполнения обратного вызова), а не к экземпляру Vue. Если вы хотите получить доступ к этому, вам нужно либо назначить его для чего-либо за пределами обратного вызова ".
Так что в моем случае...
...
formattedResults: function () {
let self = this;
let rows = [];
this.results.forEach(function($resultRow, $i) {
rows[$i] = {
id: $i + 1,
title: self.formattedMatches[$i]
};
});
return rows;
},
...
... делает свое дело. Спасибо, в любом случае!