Угловая цепочка наблюдаемых

Я сделал следующее:

A   B   C   D   E   F
----------------------
2   4   6   2   5   7
3   3   6   0   6   8
3   6   5   1   6   8
5   0   1   1   1   5
1   2   2   0   1   5


WHY I AM Subscribing B to A , C-> B , because on change of A , B will change and on change of B -> C will change (its like excel) where there are formulas on each field and change of each field other field will change 
ObservableB[i] = ObervableA[i];

ObservableC[i] = ObservableB[i].pipe();

ObservableD[i] = obbservableC[i].pipe(
Map(res => res +1)
);

ObservableE[i] = ObservableD[i].pipe();
ObservableF[i] = ObservableE[i].pipe();

А также

ObserveB = dropdown Observable
ObserveC = dropdown Observable
ObserveD = Dropdown Observable
ObserveE = Drop down Observable
ObserveF = dropdown Observable

Now:

ObserveA = ObservableA.pipe(
  map(val => 
  {
    //map only unique values of ObservableA to ObserveA
   }
  )
);

Аналогично для ObserveB, ObserveC, ObserveD, ObserveE, ObserveF.

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

ПРИМЕЧАНИЕ: раскрывающиеся списки можно выбрать несколько раз.

DropdownA values selected : 2,3

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

means for B dropdown available options should be : 4,3,6

ObserveC = 6,5 (only unique values in drop down)
ObserveD = 2,0,1
ObserveE = 5,6  (only unique values in drop down)
ObserveF = 7,8  (only unique values in drop down)```



Is this is achievable ??


person Community    schedule 05.11.2019    source источник


Ответы (1)


Как насчет следующего кода?

exclude.pipe.ts:

  @Pipe({ name: 'exclude' })
  export class ExcludePipe implements PipeTransform {

    transform(value: any[], ...args: any[]): any {
      return value.filter(x => ![].concat.apply([], args).includes(x))
    }

  }

unique.pipe.ts:

 @Pipe({ name: 'unique' })
 export class UinquePipe implements PipeTransform {

   onlyUnique = (value, index, self) => self.indexOf(value) === index;

   transform(value: any[]: any {
     return value.filter(this.onlyUnique)
   }

 }

app.component.ts:

@Component(...)
export class AppComponent {

  observableA = of([2, 4, 6, 2, 5, 7])
  observableB = of([3, 3, 6, 0, 6, 8])
  observableC = of([3, 6, 5, 1, 6, 8])
  observableD = of([5, 0, 1, 1, 1, 5])
  observableE = of([1, 2, 2, 0, 1, 5])
}

app.component.html:

<ng-container *ngIf="observableA | async as A">
  <ng-container *ngFor="let item of A | unique"> <td> {{ item }} </td></ng-container><br>
  <ng-container *ngFor="let item of (observableB | async | unique | exclude :A)"> <td> {{ item }} </td></ng-container><br>

  <ng-container *ngIf="observableB | async as B">
    <ng-container *ngFor="let item of (observableC | async | unique | exclude :A:B)"> <td> {{ item }} </td></ng-container><br>

    <ng-container *ngIf="observableC | async as C">
      <ng-container *ngFor="let item of (observableD | async | unique | exclude :A:B:C)"><td> {{ item }} </td></ng-container><br>

      <ng-container *ngIf="observableD | async as D">
        <ng-container *ngFor="let item of (observableE | async | unique | exclude : A:B:C:D)"><td> {{ item }} </td></ng-container><br>

      </ng-container>
    </ng-container>
  </ng-container>
</ng-container>    
person Rafi Henig    schedule 05.11.2019
comment
Спасибо за ваши усилия серьезно. Но я хотел бы обратить ваше внимание на две вещи: 1) почему я сделал это, это be: ObservableB [i] = ObervableA [i]; когда значение A изменяется, то B оценивается на основе некоторой формулы, аналогичной Excel 2) И, во-вторых, не только при изменении значения раскрывающегося списка других раскрывающихся списков должно измениться, но и его общего, любое изменение раскрывающегося списка должно приводить к изменению значения других раскрывающихся списков 3) Вы добавили еще один Observable на основе каждой строки ??? - person ; 05.11.2019
comment
Пожалуйста, дайте мне знать, если вы не понимаете - person ; 05.11.2019
comment
Здесь мне нужно создать структуру типа excel, где у меня есть формула один для каждого столбца, значение которого будет рассчитано на основе той же строки других столбцов, я могу добиться других вещей, но осталось выпадающее меню - person ; 05.11.2019