开发者问题收集

从 Chrome 存储中获取数据以在 Angular 组件中显示它

2021-04-24
366

我想从 chrome 存储中获取一个列表,并将其显示在我的 angular 组件中,目前我正在使用这样的函数

myList: any[];
  dataSource: MatTableDataSource<any>;
  @ViewChild(MatTable, {static: true}) table: MatTable<any>;
  @ViewChild(MatPaginator) paginator: MatPaginator;
  constructor(private fb: FormBuilder,
              private globalsService: GlobalsService,
              private snackbar: MatSnackBar) {
    chrome.storage.sync.get(['mylist'], this.getLists);
  }
getLists(value: any): any{
    this.myList = value.mylist;
    this.dataSource = new MatTableDataSource<any>(this.myList);
  }

问题是我收到此错误: TypeError:无法读取未定义的属性“length” ,在该组件的 html 文件中,我使用 myList 的属性长度来使用 mat-paginator ,如下所示:

<mat-paginator #paginator [length]="myList.length" [pageSize]="5" [pageSizeOptions]="[5, 10, 20]"></mat-paginator>

显然,myList 始终返回未定义,但是当我在 getLists 函数中执行 console.log(value.mylist) 时它没有返回未定义,我该如何解决这个问题?

2个回答

我使用 Promises

776067989 解决了它。
pinkWojak
2021-04-24

按如下方式定义 dataSource

dataSource: MatTableDataSource<any> = new MatTableDataSource([]) ;

按如下方式分配 dataSource 值。

this.dataSource.data = new MatTableDataSource<any>(this.myList);

在模板中使用 ? 添加长度属性检查

  <mat-paginator #paginator [length]="myList?.length" [pageSize]="5" [pageSizeOptions]="[5, 10, 20]"></mat-paginator>

在此处阅读更多信息 - https://developer.chrome.com/docs/extensions/reference/storage/#usage

Zam Abdul Vahid
2021-04-24