如何避免使用Object.assign?

时间:2017-02-20 11:58:07

标签: javascript angular typescript ecmascript-6 observable

我正在运行一个函数来获取类别列表,并为每个类别获取一个id并运行另一个函数来获取该特定类别中我已获得id的“链接”数量。

为此,我有以下代码:

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

    };

其中getCategories()是:

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

和countCategoryLinks()是:

<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>

看来,如下面的屏幕截图所示:

enter image description here

numlinks是一个Object。当然这是由Object.assign完成的。

有没有办法像 categoryName ot clientId而不是Object一样插入“count”?

我的目标是能够在模板中显示所有值

{{1}}

2 个答案:

答案 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));
}

答案 1 :(得分:1)

更改此行:

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

为:

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