два метода rxjs .pipe () в разных представлениях в одном и том же компоненте дают один и тот же результат, хотя в угловом файле используются два разных метода

Несколько вещей: вы можете обработать первый раз через цикл, потому что имя не изменилось бы в первый раз. Вы можете захотеть обработать, когда @ColumnName имеет значение null, потому что это означает, что ваш запрос не возвратил строку, хотя ваш запрос ниже всегда должен возвращать значение.

DECLARE @ColumnCount INT 
DECLARE @ColumnCounter INT 
DECLARE @ColumnName NVARCHAR(max) 
DECLARE @temp varchar(max)

SET @ColumnCounter = 0 

SELECT @ColumnCount = Count(c.column_name) 
FROM   information_schema.columns c 
WHERE  c.table_name = 'Province' 

WHILE @ColumnCount >= @ColumnCounter 
  BEGIN 
      SET @ColumnName = NULL 

      SELECT @ColumnName = c.column_name 
      FROM   information_schema.columns c 
      WHERE  c.table_name = 'Province' 
             AND c.ordinal_position = @ColumnCounter 

      IF ( @ColumnName != @temp ) 
        BEGIN 
        --do something 
        END
      SET @temp = @ColumnName
      SET @ColumnCounter = @ColumnCounter + 1 
  END 
0
задан Manish Vashisth 17 January 2019 в 10:30
поделиться

1 ответ

вы ссылаетесь на ту же переменную в своем сервисе редактирования через "this.data"

  public read2(id) {
    this.tempId = id;
    if (this.data.length) {
    //this.data was already initialized during your .read() initialization
    //therefore if(this.data.length) will always be true
    //if you really want to maintain this data structure in your servicem
    //create a differnt property that holds the 2nd data. e.g. "this.data2"
      return super.next(this.data);
    }


    this.fetch2()
      .pipe(
        tap(data => {
          this.data = data;
        })
      )
      .subscribe(data => {
        super.next([data]);
      });
  }

и ниже - настоящая головная боль, выборка выдает массив, который является правильным, однако выборка 2 выдает единственный объект, но вы ожидаем, что он будет загружен в вашу сетку

  private fetch(action: string = '', data?: any): Observable<any[]> {
    return this.http
      .get(`https://jsonplaceholder.typicode.com/posts`)
      .pipe(map(res => <any[]>res));
  }

  private fetch2(action: string = '', data?: any): Observable<any[]> {
    return this.http
      .get(`https://jsonplaceholder.typicode.com/posts/${this.tempId}`)
      .pipe(map(res => <any[]>res));
  }

, поэтому поместите эту строку в ваш ngOninit

this.view = this.editService.pipe(map(data => process(data, this.gridState)),filter(d=>d.total>0),take(1));

, а затем в свой сервис отредактируйте ваш read2

public read2(id) {
    this.tempId = id;
    this.data = [];
    if (this.data.length) {
      return super.next(this.data);
    }


    this.fetch2()
      .pipe(
        tap(data => {
          this.data = data;
        })
      )
      .subscribe(data => {
        //super.next(data); remove this line
        super.next([data]);
      });
  }
0
ответ дан anaval 17 January 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: