angular - 从 SafeValue 访问 @ContentChildren

标签 angular angular5

我有一个简单的组件:

@Component({
  selector: '[group_id]'
})
export class ItemComponent {}

我还有一个组件,我尝试获取作为内容传递给该组件的所有子 ItemComponent

@Component({
    selector    : 'selector',
    template    : '<ng-content></ng-content>',
})
export class SelectorComponent implements AfterContentInit {
    @ContentChildren(ItemComponent) items;

    ngAfterContentInit() {
        console.log (this.items);
    }
}

现在我在应用程序中的某个位置使用我的 SelectorComponent:

<selector>
    <div [innerHTML]="'<p group_id>A</p>' | safeHtml"></div>

    <p group_id>B</p>
    <p group_id>C</p>
    <p group_id>D</p>
</selector>

SelectorComponentngAfterContentInit 钩子(Hook)中仅获得 3 个结果(B、C、D 元素)。如果元素 A 是 SafeValue,我如何访问它?

有什么方法可以跳过要求SafeValue必须使用[property]=binding(XSS保护)?是否有其他方法来访问该组件(我对访问 DOM 元素不感兴趣,而是获取组件引用)。

最佳答案

Angular 不知道使用 [innerHTML] 添加的内容或在运行时动态添加的其他 HTML。 Angular 在应用程序构建时、部署之前编译模板,并忽略运行时添加的所有 HTML。

您可以强制执行

constructor(private elRef:ElementRef) {}

ngAfterContentInit() {
  this.elRef.nativeElement.querySelector(...)
}

或者加载动态平台来编译组件 atr untime,如 How can I use/create dynamic template to compile dynamic Component with Angular 2.0? 中所述。

关于angular - 从 SafeValue 访问 @ContentChildren,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788971/

相关文章:

javascript - 文件上传控件响应式(Reactive)表单

javascript - 检查数组是否包含字符串,但忽略该字符串中的其余字母

Angular matMenuTriggerFor 以编程方式

dependency-injection - 角 5 : Can't resolve all parameters for component

javascript - 如何使用 Angular 4/Angular 5 使用不同的参数并行多次发布相同的 URL?

typescript - 什么是 Angular 2 中的 `change` 事件

angular - 测试包含自定义表单控件的 Angular 组件?

angular - 如何在 FormArray 中设置 FormControl 的值

angular5 - 无法绑定(bind)到 'show-close',因为它不是 'modal-header' 的已知属性; modal-header' 不是 Angular 5 中的已知元素

javascript - 使用ngx-print打印图像的问题