2017-02-20 193 views
1

我正在運行一個函數來獲取類別列表和每個類別,獲取一個id並運行另一個函數來獲取該特定類別中'鏈接'的數量。如何避免使用Object.assign?

爲此,我有以下代碼:

ngOnInit(): void 
    { 
     this.categories = this.categoryService.getCategories(); 
     const example = this.categories.mergeMap((categor) => categor.map((myCateg) => 
      { 
      this.categoryService.countCategoryLinks(myCateg.id) 
       .map(numlinks => Object.assign(myCateg,{numLinks: numlinks})) 
       .subscribe(valeur => console.log(valeur)); 
      return myCateg.id 
     })); 

     example.subscribe(val => console.log("valeur2: "+val)); 
    } 

其中getCategories()是:

getCategories(): Observable<any> 
     { 
     return this.category.find({where: {clientId: this.userApi.getCurrentId()}}) 

    }; 

和countCategoryLinks()是:

countCategoryLinks(id: number): Observable<any> 
    { 
    return this.category.countLinks(id) 
    }; 

它的出現,如如下圖所示:

enter image description here

numlinks是一個對象。當然這是由Object.assign完成的。

有沒有辦法讓「count」插入如categoryName或者clientId而不是Object?

我的目標是能夠顯示在模板所有值:

<tr *ngFor="let category of categories | async; let id = index"> 
        <td> 
         <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect mdl-data-table__select" 
           for="row[3]"> 
          <input type="checkbox" id="row[3]" class="mdl-checkbox__input"/> 
         </label> 
        </td> 
        <td class="mdl-data-table__cell--non-numeric"><a [routerLink]="['/category/links']"></a>{{ 
         category.categoryName }} 
        </td> 
        <td class="mdl-data-table__cell--non-numeric">{{category.numLinks}}</td> 
        <td #category.id><i (click)="deleteCategory(id)" class="material-icons">delete</i></td> 
       </tr> 
+0

你能不能給你想要的方式輸出的樣本? –

+0

什麼是「this.category.countLinks(id)」呢? – Bigdragon

+0

我已添加我的模板代碼。 –

回答

2

如果我理解這個正確的,那麼你可以簡單地這樣做:

.map(numlinks => { 
    myCateg.numLinks = numlinks.count; 
    return myCateg; 
}) 

代替

.map(numlinks => Object.assign(myCateg,{numLinks: numlinks})) 

因此,你的代碼應該變得事端摹這樣的:

{ 
    this.categories = this.categoryService.getCategories(); 

    const example = this.categories 
    .mergeMap((categor) => categor 
     .map((myCateg) => { 

     this.categoryService 
      .countCategoryLinks(myCateg.id) 
      .map(numlinks => { 
      myCateg.numLinks = numlinks.count; 
      return myCateg; 
      }) 
      .subscribe(valeur => console.log(valeur)); 

     return myCateg.id; 
     })); 

    example.subscribe(val => console.log("valeur2: " + val)); 
} 
+0

Shoud我寫**。map(numlinks => myCateg.numlinks = numlinks.count)**?這不再顯示控制檯中的任何內容。 –

+0

是的,但我意識到它不會工作。編輯 –

+0

@PhilippeCorrèges檢查更新的解決方案 –

1

改變這一行:

.map(numlinks => Object.assign(myCateg,{numLinks: numlinks})) 

到:

.map(numlinks => Object.assign(myCateg, { numLinks: numlinks.count })) 
+0

控制檯中的「未定義」以及模板中的{{category.numLinks}}未顯示。 –

+0

@PhilippeCorrèges更新了答案。再試一次。 – Bigdragon

+0

@PhilippeCorrèges,這似乎是正確答案,不是嗎?這是唯一的問題:你分配了'numlinks'(一個具有count屬性的對象),但是需要'numlinks.count'(數字)。 – trincot