Angular 2.访问子视图

时间:2016-11-07 05:09:23

标签: angular

我使用ng2-bootstrap和模态组件。但是,问题不在于ng2-bootstrap。我的root组件中有以下模板:

... for brevity
<div bsModal #lgModal="bs-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modalLabel"
     aria-hidden="true">
    <div class="modal-dialog modal-md">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" (click)="lgModal.hide()" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
                <h4 class="modal-title">Header</h4>
            </div>

            <div class="modal-body">
                <p>Modal body</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default">Save</button>
            </div>
        </div>
    </div>
</div>

我希望在组件中获得lgModal。所以,在我的组件中:

@ViewChild('lgModal')
public lgModal: ModalDirective;

一切正常。但是,我想把modal html放到单独的组件中。例如,app-modal。然后,在root组件中我有:

...for brevity
<app-modal></app-modal>

但是,在这种情况下,lgModal组件中的root未定义。如何妥善处理?

1 个答案:

答案 0 :(得分:1)

在您的父组件中定义子组件,如下所示:

@ViewChild(AppModalComponent) appModalComponent: AppModalComponent; //assuming the name of the child component is AppModalComponent

移动

@ViewChild('lgModal')
public lgModal: ModalDirective;

到子组件。 然后,您可以使用

访问子组件中的lgModal属性
this.appModalComponent.lgModal = "something";

在您的父组件中。

参考:https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-calls-a-viewchild-