Проблема Angular 2 «template» vs «templateUrl»

#angular #routing

#angular #маршруты

Вопрос:

Я создаю приложение, используя RouterModule. Проблема в том, что когда я использую «template» в оформлении моего компонента, все работает отлично, но когда я использую вместо этого «templateUrl», приложение начинает давать сбои

Ошибки консоли: не перехвачены (в обещании): Ошибка: Ошибка в app / about.component.html: 1:30, вызванная: превышен максимальный размер стека вызовов

Просто не знаю, какие файлы могут быть полезны, потому что кажется, что проблемы там нет.

Не работает должным образом

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

     @Component({
        selector: 'about-block',
        templateUrl: 'app/about.component.html'
     })

   export class AboutComponent {}
  

Работает должным образом

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

    @Component({
       selector: 'about-block',
       template: '<h1>This is About section</h1>'
    })

   export class AboutComponent {}
  

Постскриптум

app.module.ts

 import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'
import { AppComponent }   from './app.component';

import { AppRoutingModule, routingComponents}  from './app.routing';

 @NgModule({
       imports:      [ BrowserModule, AppRoutingModule ],
       declarations: [ AppComponent, routingComponents ],
       bootstrap:    [ AppComponent ]
     })
 export class AppModule { }
  

about.component.html

    <about-block>

   </about-block>
  

Комментарии:

1. проблема, вероятно, не здесь, в файле app.module.ts.

2. Я не уверен, но где-то у вас есть ошибка comma или dot .

3. @micronyks добавил файл app.module.ts, пожалуйста, взгляните

4. Здесь у вас нет никакой ошибки. где-то в приложении у вас есть небольшая ошибка, которая вызывает эту проблему. Вы должны разобраться в этом, поскольку это сложно сказать. Я просто дал вам подсказку. Вот и все.

5. @AlexandrBelov Это может быть проблемой с about.component.html не могли бы вы, пожалуйста, поделиться своим about.component.html ?

Ответ №1:

Удалить <about-block></about-block> из about.component.html

Из-за вашего about-block тега в html-шаблоне он становится рекурсивным. Следовательно, вы получаете ошибку превышения максимального размера стека вызовов.

Комментарии:

1. Не могли бы вы, пожалуйста, немного объяснить, если я удалю тег ‘about-block’ из .html, тогда что будет делать селектор ‘about-block’? Я имею в виду, где находится элемент DOM с тегом ‘about-block’, который должен быть контейнером для моего шаблона на странице?

2. Вы можете добавить html в свой html-шаблон следующим образом- <h1>This is About section</h1>

3. Да, я понимаю это, я просто понятия не имею, что делает селектор в оформлении компонентов, потому что нет тега ‘about-block’, поэтому получается абстрактное имя без какой-либо ссылки на реальный DOM.

4. селектор предназначен для добавления этого компонента внутри другого компонента. Поскольку вы добавляете <about-block></about-block> в тот же компонент, это происходило следующим образом — <about-block><about-block><about-block>....</about-block></about-block></about-block> Как только закончится память, это выдаст ошибку.