Селектор “my-app” не відповідає жодному елементу


85

Проблема полягає в тому, що коли я запускаю свій додаток, він працює нормально. Але коли я його оновлюю, більшу частину часу я отримую нижче повідомлення.

У селекторі "my-app" не знайдено жодного елемента

Але дивно те, що багато разів, коли я оновлюю свій додаток, він також працює.

Тож зрештою я маю дивну поведінку свого додатка і не можу зрозуміти це.
Іноді це працює, іноді не ...

Будь-яка пропозиція, не можу придумати код ???

Примітка: У мене ще немає складної структури або компонентів, але проста реалізація.


опублікувати повне повідомлення про помилку або будь-яку частину коду або my-appкомпонента.
Пардіп Джейн

У 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

Я бачив це кілька разів - це проблема IE, зокрема, як вона завантажує сценарії, якщо я правильно пам'ятаю. Боюсь, я не знаю, як це виправити, це було давно, але, сподіваюся, це може спрямувати вас у правильному напрямку.
Сакса

Сакса, я також стикаюся з цією проблемою у ФФ. Я не знаю, в чому проблема. 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.jsдокументації до машинопису не включено сценарій у демонстраційні програми plunker. Хоча у мене є помилка.
Elfayer

5
Я не отримав цієї помилки, поки не спробував об’єднати зібрані файли машинопису.
ps2goat

2
Я зіткнувся з тією ж проблемою під час використання webpack для зв’язування модулів .... і одного разу я розмістив сценарій після тегу .. body .. він працює ...
рефактор

2
Ви також можете прикріпити його до події window.onload:window.onload = function(){ platformBrowserDynamic().bootstrapModule(AppModule); }
kitimenpolku

3
OMG Я так довго бився головою об стіну, намагаючись це зрозуміти, і це було так просто. Дякую!
Патрік Грем

69

Кутова 4: мені довелося змінити <app-root></app-root>з <my-app></my-app>в файл index.html


2
Здається, існує проблема зі angular-cliстворенням app-rootпосилання у index.htmlфайлі, тоді як файл ts point of tutorial Tour of Heroes посилається замість цього my-app. ІМО повинні використовувати одну і ту ж конвенцію про іменування, оскільки команда Angular рекомендує angular-cliнайкращий спосіб створити проект.
Що в Пошуку Google

Дещо схоже, на випадок, якщо хтось зіткнеться з цією проблемою з webpack-dev-сервером (WDS) - я створив свою програму, коли селектор був <app-root>, і запустив програму за допомогою WDS. Потім я змінив селектор на <my-app> у моєму компоненті та index.html. Тоді я почав отримувати вище помилки. Проблема в тому, що index.html у папці "dist" не оновлено. Я зупинив WDS, знову створив свою програму, а потім запустив програму. Все почало працювати дуже добре!
ramtech

26

Що робити:

  1. Перейдіть до app.module.ts (до основних модулів, в більшості випадків це ім'я)
  2. Перевірте, чи є у вас частина " boostrap :" - якщо немає додавання:

    bootstrap: [AppComponent] // де AppComponent - це ваш основний компонент

  3. Перевірте, чи працює це зараз, якщо ні - перейдіть до AppComponent і перевірте свій селектор . Він повинен бути таким же, як теги в тілі в index.html

тому index.html повинен містити щось на зразок цього:

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

де замість <app-root>вас слід використовувати селектор з основного AppComponent

  1. Якщо ви використовуєте свою програму angular на зовнішньому веб-сайті, вам слід розглянути можливість використання відкладеного в заголовках для кутових файлів

4
<body>тег це виправив
Олексій Окрушко

Дякую! Це вирішило мою проблему.
Мухаммед Айяз

6

Я отримав таку ж проблему, коли використовую Angular Universal. Але це тому, що я використовую BrowserModuleв main.node.ts , рішення є

  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/…
Dessus

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

Я оновлював програму Angular 5.2 до Angular 6.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 повинен мати лише один компонент. Помилково я помістив 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 { }


2

Це трапилося зі мною, коли я змінив компонент bootstrap AppComponentна новий. Коли ви змінюєте його, вам потрібно змінити його і в основному index.html. index.htmlповинен містити компонент bootstrap.

Наприклад, якщо ви зміните app-componentдо app-loginв app.module.tsу розділі початкового завантаження , то Вам слід оновити , index.htmlяк це

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

1

Коли я створюю новий компонент, потрібно виконати наведені нижче дії, щоб вирішити наведені нижче проблеми.

Крок 1 - Створіть новий comonent за допомогою ng g c lakshya. Крок 2- Під програмою lakshya folfer, створеною з 4 файлами. Крок-3- Index.html потрібно <app-root></app-root>виконати <app-lakshya></app-lakshya> крок 4- app.Module.ts змінити файл завантаження: [AppComponent] на bootstrap: [LakshyaComponent]

так вище вирішення помилки.


0

Джанго + Кутова

У мене був власний index.html, а не той, який генерується кутовим CLI.

У мене виникла ця помилка, оскільки я розмістив створені файли скриптів у <head>розділі, а не в кінці закриваючого </body>тегу (після <app-root></app-root>тегів)


0

У вашому app.module.ts, якщо у вас є my-app у завантажувальному стріппі, прокоментуйте або видаліть його.

bootstrap: [AppComponent, // my-app]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.