2017-02-20 143 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