选择器"my-app"与任何元素都不匹配

mic*_*yks 79 angular

问题是当我运行我的应用程序时,它工作正常.但是当我刷新它时,大部分时间我都低于msg.

选择器"my-app"与任何元素都不匹配

但奇怪的是,很多时候,当我刷新我的应用程序时,它也有效.

所以最终我的应用程序有一个奇怪的行为,无法解决这个问题.
有时它的工作有时不...

有任何建议,不能拿出代码???

注意:我没有复杂的结构或组件,但实现简单.

Ed *_*ffe 98

这发生在我身上,因为我在head标签中导入了我的代码,因此它可能正在运行并尝试在DOM准备好之前进行引导.

您可以将脚本移动到body标记的底部,也可以将引导代码放在事件侦听器中:

document.addEventListener("DOMContentLoaded", function(event) {
  bootstrap(AppComponent);
});
Run Code Online (Sandbox Code Playgroud)

要么:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Example app</title>
  </head>
  <body>
    <my-app></my-app>
  </body>
  <script src="main.js" charset="utf-8"></script>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 在我尝试捆绑编译的打字稿文件之前,我没有收到此错误. (5认同)
  • 天啊我把头撞在墙上这么长时间试图解决这个问题,这很简单.谢谢! (3认同)
  • 我在使用webpack进行模块捆绑时遇到了同样的问题....一旦我将脚本放在... body标签之后......它正在工作...... (2认同)
  • 您还可以将它附加到window.onload事件:`window.onload = function(){platformBrowserDynamic().bootstrapModule(AppModule); }` (2认同)

Mla*_*jac 57

角4:我不得不改变 <app-root></app-root><my-app></my-app>index.html文件中

  • 在`index.html`文件中创建`app-root`引用的`angular-cli`似乎有问题,而Tour of Heroes教程入口点ts文件则指的是`my-app`.IMO这两个应该使用相同的命名约定,因为Angular团队一直在推荐`angular-cli`作为创建项目的最佳方式. (2认同)

Prz*_*ski 22

要做的事:

  1. 转到app.module.ts(到主模块,大多数情况下这是一个名字)
  2. 检查你是否有" boostrap:" 部分- 如果没有添加:

    bootstrap: [AppComponent] // AppComponent是您的主要组件

  3. 检查它是否现在有效 - 如果没有 - 转到AppComponent并检查您的选择器.它应该与index.html中的body中的标签相同

所以index.html应该包含这样的东西:

<body>
  <app-root>Loading...</app-root>
</body>
Run Code Online (Sandbox Code Playgroud)

而不是<app-root>你应该使用主AppComponent中的选择器

  1. 如果您在外部网站中使用角度应用程序,那么您应该考虑在角度文件的头文件中使用延迟

  • `<body>`标签修复了它 (3认同)

Hon*_*iao 6

当我使用Angular Universal时,我遇到了同样的问题.但这是因为我BrowserModulemain.node.ts中使用,解决方法是

  imports: [
    UniversalModule,
    BrowserModule   // <- delete this will solve the issue
  ],
Run Code Online (Sandbox Code Playgroud)

并在此处查看更多信息:https://github.com/angular/universal/issues/542


Rav*_*sai 5

如果你从这里使用angular2/asp.net核心模板:http://blog.stevensanderson.com/2016/10/04/angular2-template-for-visual-studio/你可能会发现替换最后几行boot-client.ts具有以下帮助(当HMR重新加载页面时避免了很多可怕的控制台错误):

const bootApplication = () => { platform.bootstrapModule(AppModule); };
if (document.readyState === 'complete') {
    window.onload = () => bootApplication();
    location.reload();
} else {
    document.addEventListener('DOMContentLoaded', bootApplication);
}
Run Code Online (Sandbox Code Playgroud)


DIB*_*THY 5

以上答案都没有解决我的问题。这就是解决同类错误的方法。你不应该有多个组件作为 Bootstarp 组件。所以,Bootstrap 数组应该只有一个组件。我错误地将 4 个组件放入了 bootstrap 数组。我从那里删除了这 4 个组件并放入了 entryComponents 数组(如图所示)下面的代码)。这对我有帮助。

@NgModule({
 declarations: [
AppComponent,
SanackBarBodyComponent,
SuccessNavBarComponent,
AlertNavBarComponent,
NormalNavBarComponent
],
entryComponents:[ 
SanackBarBodyComponent,
SuccessNavBarComponent,
AlertNavBarComponent,
NormalNavBarComponent
],

imports: [
BrowserModule,
BrowserAnimationsModule
],
 providers: [],
 bootstrap: [AppComponent
]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)