У вас не может быть указатель с двойными ключами для определения! Установлено, что вы можете использовать один ключ и, как значение, список элементов, имеющих этот ключ.
Итак, вы можете выполнить следующие шаги:
Вы получаете эту ошибку из-за следующего кода:
snapshot.forEach(function(childSnapshot) {
this.columns.push( { columnDef: childSnapshot.heroname, header: childSnapshot.herotitle, cell: (element: any) => `${element.heroname}` });
this.displayedColumns = this.columns.map(c => c.columnDef);
return false;
});
Здесь forEach
принимает функцию обратного вызова в качестве первого параметра, а this
внутри обратного вызова находится в другом контексте и, следовательно, Вы получаете эту ошибку.
Чтобы решить эту проблему, вам нужно использовать функцию стрелки :
Функция стрелки не имеет своей собственной
blockquote>this
. Используется значение this лексической области видимости; Функции стрелок следуют нормальным правилам поиска переменных. Таким образом, при поискеthis
, который отсутствует в текущей области видимости, они в конечном итоге находятthis
из включенной области видимости.По сути, это означает, что
this
внутри функции стрелки будет ссылаться наthis
, в котором была определена функция стрелки, поэтому вы сможете сделать следующее:snaphot.forEach((childSnapshot)=>{ this.columns.push( { columnDef: childSnapshot.heroname, header: childSnapshot.herotitle, cell: (element: any) => `${element.heroname}` }) this.displayedColumns = this.columns.map(c => c.columnDef); return false; });