セレクター「my-app」がどの要素とも一致しませんでした


85

問題は、アプリを実行すると正常に動作することです。しかし、それを更新すると、ほとんどの場合、メッセージを下回ります。

セレクター「my-app」がどの要素とも一致しませんでした

しかし、奇妙なことに、アプリを更新すると、それも機能することが何度もあります。

そのため、最終的にはアプリの動作がおかしくなり、これを理解できなくなります。
時々それは時々動作しません...

どんな提案でも、コードを思い付くことができませんか?

注:複雑な構造やコンポーネントはまだありませんが、実装は単純です。


エラーメッセージ全体、またはコードまたはmy-appコンポーネントの一部を投稿してください。
Pardeep Jain 2016

IE11-Potentially unhandled rejection [2] The selector "micropuppy-app" did not match any elementsおよびFF- '例外:セレクター「my-app」がどの要素とも一致しませんでしたBaseException @ cdnjs.cloudflare.com/ ajax/ libs/ angular.js/ 2.0.0-beta.7/ …..。 .. ... .....そして続行 '
micronyks 2016

私はこれを数回見ました-これはIEの問題であり、特に私が正しく覚えている場合にスクリプトをロードする方法です。修正方法がわからないのではないかと思いますが、かなり前のことですが、正しい方向に向けられることを願っています。
Sasxa 2016

Sasxa、FFでもこの問題に直面しています。何が問題なのかわかりません。N ...無力を感じる
micronyks

回答:


101

これは、headタグにコードをインポートしていたために発生しました。そのため、DOMの準備が整う前に、コードが実行され、ブートストラップを試みていた可能性があります。

スクリプトをbodyタグの下部に移動するか、ブートストラップコードをイベントリスナー内に配置することができます。

document.addEventListener("DOMContentLoaded", function(event) {
  bootstrap(AppComponent);
});

または:

<!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>

main.jstypescriptドキュメントのプランカーデモにはスクリプトが含まれていません。私にはエラーがありますが。
Elfayer 2016年

5
コンパイルしたtypescriptファイルをバンドルしようとするまで、このエラーは発生しませんでした。
ps2goat 2016年

2
モジュールのバンドルにwebpackを使用しているときに同じ問題に直面しました。スクリプトを..bodyタグの後に配置すると、機能します...
2016

2
また、window.onloadイベントにアタッチすることができます:window.onload = function(){ platformBrowserDynamic().bootstrapModule(AppModule); }
kitimenpolku

3
OMG私はこれを理解しようと長い間壁に頭をぶつけていました、そしてそれはとても簡単でした。ありがとうございました!
パトリック・グラハム

69

Angular 4:index.htmlファイルで変更する必要 <app-root></app-root>があり <my-app></my-app>ました


2
ファイル内の参照のangular-cli作成に問題があるようですが、Tour ofHeroesチュートリアルのエントリポイントtsファイルは代わりにを参照しています。Angularチームがプロジェクトを作成するための最良の方法として推奨しているため、IMO2つは同じ命名規則を使用する必要があります。app-rootindex.htmlmy-appangular-cli
Google検索で何

webpack-dev-server(WDS)でこの問題に直面している人のために、多少似ています-セレクターが<app-root>のときにアプリをビルドし、WDSを使用してアプリを起動しました。次に、コンポーネントとindex.htmlでセレクターを<my-app>に変更しました。それは私が上記のエラーを取得し始めたときです。問題は、「dist」フォルダの下のindex.htmlが更新されなかったことです。WDSを停止し、アプリを再構築してからアプリを起動しました。すべてがうまく機能し始めました!
ramtech 2017年

26

やる事:

  1. app.module.tsに移動します(メインモジュールにます。ほとんどの場合、これは名前です)
  2. パーツ「ブーストラップ」があるかどうかを確認します:」の-追加しない場合:

    bootstrap: [AppComponent] // AppComponentがメインコンポーネントです

  3. 今すぐ機能するかどうかを確認します機能しない場合は、AppComponentに移動してセレクターを確認しますindex.htmlの本文のタグ同じである必要があります

したがって、index.htmlには次のようなものが含まれている必要があります。

<body>
  <app-root>Loading...</app-root>
</body>

代わりに<app-root>、メインのAppComponentのセレクターを使用する必要があります

  1. 外部WebサイトでAngularアプリを使用している場合は、Angularファイルのヘッダーでdeferを使用することを検討する必要があります

4
<body>タグで修正
Alex Okrushko 2018年

ありがとうございました!それは私の問題を解決しました。
ムハンマドアヤズ

6

AngularUniversalを使用したときに同じ問題が発生しました。しかし、それは私がmain.node.tsで使用BrowserModuleしているためです、解決策は

  imports: [
    UniversalModule,
    BrowserModule   // <- delete this will solve the issue
  ],

詳細については、こちらを確認してください:https//github.com/angular/universal/issues/542


これは、Angularの最新バージョンには当てはまりません。最近では、BrowserModuleがUniversalModuleに取って代わりますが、クライアントとサーバーが交換できるように、appIdがパラメーターとして渡されます。ここを参照してください:github.com/angular/universal/blob/...
デシュ

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);
}

4

Angular5.2アプリをAngular6.1に更新していたところ、同様の問題が発生しました。この場合の問題は、index.htmlファイルにまったく含まれていないこと<body>でした。代わりにに含まれていましたmy-appコンポーネント。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Example</title>
  <base href="https://stackoverflow.com/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<my-app></my-app>
</html>

これは、生成されたものであるため、Angular 5.2(および以前のバージョンも)で機能していました index.htmlではスクリプトタグが最後に配置されていた。6.1にアップグレードした後、代わりにスクリプトタグがファイルの先頭に配置されました(したがって、<my-app></my-app>ルート要素が実際に存在する前に実行されたと思います。

ソリューションは、移動することだった<body>index.htmlを。(元々は、誰かが条件付きクラスをbody要素に適用したかったためにコンポーネントに配置されましたngClass。)


4

上記の答えのどれも私の問題を解決しませんでした。これは同じ種類のエラーを解決する方法です。Bootstarpコンポーネントとして複数のコンポーネントを含めることはできません。したがって、Bootstrap配列には1つのコンポーネントのみを含める必要があります。誤って4つのコンポーネントをブートストラップ配列に配置しました。それらの4つのコンポーネントをそこから削除し、entryComponents配列に配置しました(以下のコード)これは私を助けました。

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

imports: [
BrowserModule,
BrowserAnimationsModule
],
 providers: [],
 bootstrap: [AppComponent
]
})
export class AppModule { }


2

これは、ブートストラップコンポーネントをからAppComponent新しいコンポーネントに変更したときに発生しました。あなたがそれを変えるとき、あなたはそれをメインindex.htmlでも変える必要があります。index.htmlブートストラップコンポーネントが含まれている必要があります。

たとえば、ブートストラップセクションでapp-componentapp-logininapp.module.tsに変更した場合は、次のindex.htmlように更新する必要があります。

<body>
  <app-login></app-login>
</body>

1

新しいコンポーネントを作成するときは、以下の問題を解決するために以下の手順に従う必要があります。

ステップ-1-で新しいコンポーネントを作成する ng g c lakshya。を。ステップ-2-4つのファイルで作成されたアプリlakshyafolferの下。ステップ-3-たindex.html必要<app-root></app-root><app-lakshya></app-lakshya> ステップ4 - app.Module.tsファイル変更のブートストラップ:[AppComponent]ブートストラップへ:[LakshyaComponent]

したがって、上記のエラーは解決します。


0

Django + Angular

Angular CLIによって生成されたものではなく、カスタムのindex.htmlがありました。

生成されたスクリプトファイルを<head>終了</body>タグの最後(タグの後<app-root></app-root>)ではなくセクションに配置したため、このエラーが発生しました


0

app.module.tsで、ブートストラップにmy-appがある場合は、コメントするか削除します。

ブートストラップ:[AppComponent、// my-app]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.