【发布时间】:2016-07-30 00:01:38
【问题描述】:
在 Angular 2 中,组件有自己的范围,因此其模板中任何数据绑定的绑定上下文都是组件本身。 NG2 没有外部绑定上下文的概念(又名 ng1 中的 $scope、xaml 中的 datacontext、aurelia/knockout 中的 bindingcontext 等),这很糟糕而且很奇怪,但不是这个问题的重点。我的问题是 ng-content 是如何实现的?
假设子组件有以下模板:
<div><ng-content></ng-content></div>
假设父组件有以下模板:
<child><input [(ngModel)]="name"></child>
并且说父母和孩子都有一个“名字”属性......
如果我理解正确,在运行时输入元素的绑定上下文将是父元素,而不是子元素,尽管事实上父元素的内容被转置为子元素......这是如何实现的?我有一个子组件,它使用 DynamicComponentLoad 将内容(不是来自父级)动态插入到自身中,并且需要绑定上下文保持为父级?有人有想法么?有没有人知道 ng-content 如何使这项工作发挥作用?我了解输入绑定是如何工作的,并且我了解服务是如何工作的......但是这些都不是我想要的......在我的组件中,我将动态添加内容,但我需要这个内容的绑定上下文是外部组件...
谢谢
【问题讨论】:
-
不,它不是一个组件。它是编译器 (github.com/angular/angular/blob/2.0.0-rc.4/modules/%40angular/…) 中的
ast(Abstract Syntax Tree) 节点,它是使用visitNgContent方法 github.com/angular/angular/blob/2.0.0-rc.4/modules/%40angular/… 编译的 -
<ng-content>只是在添加<ng-content>标签的位置插入转置的HTML。否则没有什么特别的。绑定发生在添加 HTML 的上下文中,无论 HTML 是否包含在具有<ng-content>的元素中。
标签: angular