2016-06-02 8 views
3

각도 1.x에서는 지시어 내부에 요구함으로써 부모 컨트롤러를 참조 할 수 있습니다. 그러나, 앵귤러 2의 전체 네이밍 스위치 오버와 함께, 나는 그 기능과 동등한 것을 찾을 수 없을 것입니다. 나는 아이로 부모를 @input하는 것입니다 참조ng2 : 필요량과 같음

  • 한 가지 방법은, 그러나 그것은 조금 많은 것 같다

    상황이 지금까지 노력했다.

  • 내가 본 또 다른 방법은 서비스를 사용하는 것이지만 내 지식에 따라 서비스는 여전히 싱글 톤이므로 다른 구성 요소가 다른 구성 요소의 하위 요소를 망칠 수 있습니다. 자식이 서비스를 참조했습니다 ...
  • 마지막으로 이러한 로컬 변수를 사용했습니다 (해시 태그가있는 것). 입력과 함께 첫 번째 옵션과 동일하게 보였습니다.

답변

4

잘 모르겠는데 따라서 어떤 require이 정확히 사용되는지 또는 어떤 용도로 사용되는지 알 수 없습니다.

  • 는 일반적으로 당신이 서비스는 당 싱글 톤

    <child [childInput]="parentValue" (childOutput)="doSomethingInParent()"> 
    
    • 부모와 자녀

    부모 템플릿을 와이어 바인딩 템플릿을 사용 : 귀하의 질문에 언급 된 총알

    공급자. 동일한 공급자가 항상 동일한 인스턴스를 반환하지만 동일한 서비스를 여러 번 제공 할 수 있으며 더 이상 실제 싱글 톤이 아닙니다. 따라서 서비스를 제공하는 곳은 싱글 톤으로 처리되는 범위를 정의합니다. 구성 요소에 제공하면이 구성 요소 인스턴스와 모든 하위 구성 요소는 동일한 인스턴스를 갖게됩니다 (하위 구성 요소가 동일한 유형을 제공하지 않는 한).

이 DI 동작은 질문에서 언급 한 것과 같은 충돌을 방지합니다.

  • 템플릿 변수는 오히려의 생성자에 주입하는 형제 자매
<child1 [child1Input]="child2.child2Prop" 
    (child1Output)="child2doSomethingInChild2()"> 
<child2 #child2></child2> 
  • 상위 구성 요소의 유형을 알고 있다면, 당신이 그것을 필요로 할 수 있습니다 참조하는 데 사용됩니다 하위 구성 요소
constructor(@Host() private parent:ParentComponent) {} 

이것은 특히 부모와 같은 재귀 구성 요소 (예 : 트리)에서 유용 할 수 있습니다.이 경우 추가 데코레이터

  • @Optional()
  • @SkipSelf()를 주입 할 수있는 동일한 유형의 부모가 없기 때문에 예외를 방지하기 위해 루트 구성 요소입니다

    constructor(@Optional() @SkipSelf() @Host() private parent:ParentComponent) {} 
    

    이를 방지해야 할 수도 있습니다 실제로 주입하려고하는 부모와 동일한 유형 일 때 구성 요소 자체를 주입 할 수 있습니다. DI는 항상 공급자 자체를 찾기 위해 구성 요소 자체에서 시작합니다.

Inject parent component of the same type as child component

+0

Wauw는, 생성자에 관한 마지막 정확히 내가 필요로 무엇을 참조하십시오! 매우 좋았습니다 ;-) 이것이 가능하다는 것을 몰랐습니다 ;-) – Xabre

+0

듣기 좋게 :) –