gpt4 book ai didi

javascript - #selector 仅适用于根元素而不适用于 Angular 子元素

转载 作者:太空狗 更新时间:2023-10-29 18:27:34 30 4
gpt4 key购买 nike

当我使用如下 id 为根元素(应用程序组件)定义选择器时,我对选择器感到困惑 我能够呈现组件

index.html

<body>

<div id="root"></div>

</body>

应用程序组件.ts

import { Component } from '@angular/core';

@Component({
selector: '#root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'helloworld';

}

app.component.html

div class='my-text' >My Root Component</div>


<div id='child'></div>

我能够呈现父组件,但是如果我在子选择器中遵循相同的定义规则,我将无法呈现子组件

@Component({
selector: '#child',
templateUrl: './child1.component.html',
styleUrls: ['./child1.component.scss']
})

但是如果我将选择器更改为 selector=[id=child]

为什么适用于父项的选择器定义在子项中失败?

Angular 版本 8

最佳答案

Angular 编译器 uses the following regexp解析选择器:

const _SELECTOR_REGEXP = new RegExp(
'(\\:not\\()|' + //":not("
'([-\\w]+)|' + // "tag"
'(?:\\.([-\\w]+))|' + // ".class"
// "-" should appear first in the regexp below as FF31 parses "[.-\w]" as a range
'(?:\\[([-.\\w*]+)(?:=([\"\']?)([^\\]\"\']*)\\5)?\\])|' + // "[name]", "[name=value]",
// "[name="value"]",
// "[name='value']"
'(\\))|' + // ")"
'(\\s*,\\s*)', // ","
'g');

如您所见,没有按 id 选择器。

此外,您的选择器 #root#child将匹配到 rootchild元素。所以,如果你替换 <div id='child'></div><child></child>然后子组件将被渲染。

为什么根选择器有效?

这是因为根组件被特殊对待,并使用以下代码将其引导为动态组件:

componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);
^^^^^^^^^^^^^^
#root

Angular 在哪些地方使用 document.querySelector(selectorOrNode)如果我们提供了字符串,就可以找到专用元素。

另一方面,所有嵌套组件只有在它们的选择器与模板中的元素匹配时才会呈现。

关于javascript - #selector 仅适用于根元素而不适用于 Angular 子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921745/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com