Firebase with angular: экспортировать только выбранные поля, чтобы отличаться от извлеченной firebase с угловым - PullRequest
0 голосов
/ 19 марта 2019

Есть проблема с моей работой., поскольку Firebase Web / JavaScript API всегда возвращает полное дерево под узлами, которые мы запрашиваем .

Таким образом, в моем случае я извлек все существующие поля из firebase, в том числе сначала чувствительные поля , и после этого я хочу экспортировать только лучшие выбранные поля, а не все поля, которые я получил .проблема в том, что я всегда успешно экспортировал все существующие поля, включая чувствительные поля.

Можно ли экспортировать только выбранное поле и исключить чувствительное поле?Ниже приведен мой код:

Я получаю все мои поля, включая данные из firebase, в моем файле .ts, например:

 getData() {
    this.dataLoading = true;
    this.querySubscription = this._backendService.getDocs('report')
      .subscribe(members => {
        this.members = members;
        this.dataSource = new MatTableDataSource(members);
        this.dataSource.paginator = this.paginator;
        this.dataSource.sort = this.sort;
      },
        (error) => {
          this.error = true;
          this.errorMessage = error.message;
          this.dataLoading = false;
        },
        () => { this.error = false; this.dataLoading = false; });
  }

    //export func
    exportAsXLSX():void{
      this._backendService.exportAsExcelFile(this.members, 'sample');
    }

My BackendСервисный код:

    getDocs(coll:string,filters?:any){
    this.itemsCollection=this.afs.collection<any>(this.getCollectionURL(coll));
    return this.itemsCollection.valueChanges();
  }

    getCollectionURL(filter){
        return "ReportApp/fajar/"+filter;
      }

    //export func
    public exportAsExcelFile(json: any[], excelFileName: string): void {
      const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
      const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
      const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
      this.saveAsExcelFile(excelBuffer, excelFileName);
    }
    private saveAsExcelFile(buffer: any, fileName: string): void {
       const data: Blob = new Blob([buffer], {type: EXCEL_TYPE});
       FileSaver.saveAs(data, fileName + '_export_' + new  Date().getTime() + EXCEL_EXTENSION);
    }

. Для справки я использую здесь код для экспорта в Excel: https://medium.com/@madhavmahesh/exporting-an-excel-file-in-angular-927756ac9857

Как вы можете видеть, я поместил все свои данные в this.member переменная и экспорт em, но в результате я экспортировал все их, я хочу экспортировать только выбранные поля.

1 Ответ

0 голосов
/ 23 марта 2019

Вам нужно будет "обрезать" массив данных элемента, прежде чем отправлять его в ваш метод exportAsExcelFile(). Ваша проблема в том, что вы передаете ALL данных члена в эту функцию экспорта. Поэтому решение состоит в том, чтобы удалить любую конфиденциальную информацию до того, как вызовет функцию экспорта.

exportAsXLSX():void {
    // TRIM DOWN ARRAY HERE
    this._backendService.exportAsExcelFile(this.members, 'sample');
}

Поскольку вы не предоставили структуру базы данных своих членов или сведения о том, что вы считаете конфиденциальной информацией, я приведу общий пример. У вас есть массив членов ... Скорее всего, вы превратили каждый "член" в массиве в объект ... поэтому нам нужно перебрать этот массив и удалить свойство "чувствительное" каждого объекта члена.

В качестве меры предосторожности, поскольку мы не хотим удалять свойства из массива ACTUAL, поскольку массивы имеют тип reference-типы , и поскольку эти сведения могут понадобиться в другом месте ... давайте сделаем копию массива - глубокая копия , чтобы обеспечить копирование даже вложенных объектов.

var newMemberArray = JSON.parse(JSON.stringify(this.members))

Затем нам нужно перебрать этот новый массив и удалить наши чувствительные свойства:

newMemberArray.forEach(function(m){
    delete m.sensitivePropertyName1;
    delete m.sensitivePropertyName2;
});

и передайте этот «продезинфицированный» массив вашей функции экспорта ... так что сложите все это вместе, что-то вроде:

exportAsXLSX():void {
    var newMemberArray = JSON.parse(JSON.stringify(this.members))
    newMemberArray.forEach(function(m){ delete m.sensitivePropertyName });
    this._backendService.exportAsExcelFile(newMemberArray, 'sample');
}

* Отказ от ответственности: непроверенный код, только для пояснения

...