2017-02-20 6 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입니다. 물론 이것은 Object.assign에 의해 수행됩니다.

"카운트"를 삽입하는 방법이 있나요 categoryName ot clientId 대신 Object가 필요합니까?

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

대신 : 나는 상황을 제대로 이해한다면

<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 => Object.assign(myCateg,{numLinks: numlinks})) 

따라서 코드는 이 같은 g :

{ 
    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 나는 **지도를 작성합니다 (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

"undefined"가 표시되고 템플리트의 {{category.numLinks}}가 표시되지 않습니다. –

+0

@ PhilippeCorrèges 답변을 업데이트했습니다. 다시 시도하십시오. – Bigdragon

+0

@ PhilippeCorrèges, 이것이 올바른 대답 인 것 같습니다. 그렇지 않습니다. 그것은 당신이 가진 유일한 문제입니다 : 당신이'numlinks' (count 속성을 가진 객체)를 할당했지만'numlinks.count' (숫자 만)를 원합니다. – trincot

관련 문제