2016-10-15 3 views
5

고위 주문 구성 요소 (HOC)는 React 커뮤니티에서 일반적인 패턴입니다. HOC가 무엇인지 알 수없는 경우 this article을 참조하십시오.각도 2로 고차원 구성 요소를 만드는 방법

Angular 2에서 의미가 있습니까? HOC를 만드는 방법? 예제가 있습니까?

+0

어쩌면 다음 내용이 도움이 될 수 있습니다. https://angular.io/docs/ts/latest/cookbook/dynamic-form.html, http://mean.expert/2016/05/14/angular-2 -container-component/ – Sasxa

+0

현 상태의 질문은 반응과 각도 모두를 잘 이해해야합니다. 2. HOC 용어를 사용하지 않고 정확히 무엇을하고 싶은지 설명하면 양질의 대답을 얻을 수있는 기회가 증가합니다. – estus

답변

1

저는 HOC (Angular 2와 같은 Recompose)와 비슷한 것에도 매우 관심이 있습니다. 나는 최근 Angular 구조 지시어를 사용하여 angleToProps HOC 'Recompose for Angular - mapToInputs에 아날로그를 만들려고했다. 나는 더 나은 접근법을 찾고있다.

@Component({ 
    selector: 'user-list', 
    template: ` 
     <h2>{{status}} users</h2> 
     <div *ngFor="let item of data">{{item}}</div> 
    ` 
    }) 
    export class UserList { 
    @Input() data: Array<any>; 
    @Input() status: string; 
    } 

    @Directive({selector: '[mapInputs]'}) 
    export class MapInputs { 
    component; 

    @Input() set mapInputsComponent(component) { 
    this.component = component; 
    } 

    @Input() set mapInputs(fn) { 
     this.vc.clear(); 
     let factory = this.componentFactoryResolver.resolveComponentFactory(this.component); 
     let componetRef = this.vc.createComponent(factory); 

     let inputs = fn(); 
     console.log(inputs); 
     Object.entries(inputs).forEach(([key, value]) => { 
     componetRef.instance[key] = value; 
     }); 
    } 

    constructor(private vc: ViewContainerRef, 
      private componentFactoryResolver: ComponentFactoryResolver) { 
    } 
    } 

    @Component({ 
    selector: 'my-app', 
    template: ` 
     <div> 
     <button (click)="doubledata()">Doubel Data</button> 
     <div *mapInputs="filterBy.bind(null, {data:data, status:'active'}); component: component"></div> 
     <div *mapInputs="filterBy.bind(null, {data:data, status:'passive'}); component: component"></div> 
     <div *mapInputs="filterBy.bind(null, {data:data, status:'blocked'}); component: component"></div> 
     </div> 
    `, 
    }) 
    export class App { 
    name: string; 
    component = UserList; 
    data = ['active', 'active', 'passive', 'blocked', 'blocked']; 
    filterBy = (context) => { 
     return { 
      status: context.status, 
      data: context.data.filter(el => el === context.status); 
     }; 
    } 

    doubledata(){ 
     this.data = this.data.concat(this.data); 
    } 

    constructor() { 
     this.name = `Angular! v${VERSION.full}` 
    } 
    } 
+0

보기 흉하게 접근합니다. Angular가 "자연스럽게"그렇게하지 못하는 것처럼 보입니다 ...이 접근법을 너 자신에게 사용하고 있습니까? –

+1

여기에 두 가지 두 가지 유형의 HOC가 있습니다. 프록시 소품 HOC 각도로 만들 수 있지만 상속 반전 - 나는 어떻게 AOT와 각도로 할 생각이 없습니다. 나는 반응의 HOC에 대한 아이디어를 정말 좋아하고 각성 상태에 빠지기를 좋아한다. –

관련 문제