Angular - 子组件可以引用父组件的模板变量吗?

标签 angular primeng

我正在使用 primefaces primeng 组件 p-contextmenu 开发 Angular 4 应用程序。我试图告诉子元素使用父组件的模板变量。

app.html:

<div>
  <router-outlet></router-outlet>
  <div #contextMenuHolder></div>
</div>

mycomponent.html:

<p-contextMenu [appendTo]="contextMenuHolder" [model]="items"></p-contextMenu>

显然它会失败,因为 contextMenuHolder 不存在于子级中,而是存在于其父级中:

Angular: Identifier 'contextMenuHolder' is not defined. The component declaration, template variable declarations, and element references do not contain such a member

您可以从子组件引用父组件的模板变量吗?

编辑:

Plunkr with it broken 。这个 plunkr 显示它不起作用,但没有错误消息。

最佳答案

appendTo 的文档说

Target element to attach the overlay, valid values are "body" or a local ng-template variable of another element.

也许服务可以解决该问题:

@Injectable()
export class ContextMenuHolder {
  contextMenu: any; // TODO set a type (HTMLElement?)

  getContextMenu() {
    return this.contextMenu;
  }

  setContextMenu(contextMenu: any) {
    this.contextMenu = contextMenu;
  }
}

在您的 app.ts 中,您注入(inject)服务并设置值。 在您的 component.ts 中,您注入(inject)服务并获取值。

我没有测试它,但它应该可以工作。如果 contextMenu 可以更改,您将必须使用事件监听器或可观察的。

关于Angular - 子组件可以引用父组件的模板变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45745607/

相关文章:

angular - 如何添加自定义 Prime NG 组件

javascript - 如何在同一控件上为不同事件实现不同的 debounceTime?

Angular:当使用 innerHTML 并禁用缓存时,图像会在单击时重新加载

Angular Material 6.2.1 "mat-form-field-infix"覆盖宽度

angular - 如何更正 Angular 为 11 的 Spring Boot 中与 Cors Origin 相关的问题?

angular - 如何根据响应类型在 Angular 2 中链接 http 请求

angular - PrimeNG p-multiSelect 未显示所选值

angular - 如何使用显示标签默认选择多选primeng的值

angular - 服务相依

angular - 在上一个完成后调用行中的过滤器方法