在Angular中如何检测直接父母并与之沟通?

时间:2017-05-17 17:43:19

标签: angular components parent-child inject

我有一个子组件( child.component ),可以在两个父组件中使用:

  1. parentA.component
  2. parentB.component
  3. 在这种情况下,可以制作如下几个模板:

    <parentA>
      <child></child>
    </parentA>
    
    <parentA>
        <parentB>
           <child></child>
        </parentB>
    </parentA>
    

    由于某些原因, child.component 需要检测直接父级是否为parentB。

    我使用'@Inject(forwardRef(()=&gt; parentBComponent))private _directParent:parentBComponent'

    这样做:

    child.component.ts

    export class ChildComponent {
         ...
         constructor(@Inject(forwardRef(() => parentBComponent)) private _directParent:parentBComponent){
             console.dir(_directParent);
         }
    }
    

    但如果 child.component 未被 parentB.component 包装,我会收到此错误:

      

    “EXCEPTION:http://localhost:3000/app/tests/6.html:5:8导致错误:没有ParentBComponent的提供者!”

    我该怎么办?

1 个答案:

答案 0 :(得分:0)

对于某些情况,解决方案是让变量 _directParent 可选,感谢装饰器@Optional()

@Inject(forwardRef(() => parentBComponent)) @Optional() private _directParent:parentBComponent

如果您只有两个案例,并且在一个案例中没有parentBComponent,那么这是有效的。 但没有获得直接父母,只需获得一个拥有此组件名称的父母。