18

I have a simple app created with Angular-CLI, I wanted to refactor and move the app.component.ts code in separate component file and started to get a nasty error:

Module not found: Error: Can't resolve on './sb/sb.component.html' ( my SBComponent). Under the

This what i have:

app.module:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';

import { AppComponent } from './app.component';
import { SBComponent  } from './sb/sb.component'

@NgModule({
  declarations: [
    AppComponent, SBComponent  
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

app.component:

import { Component } from '@angular/core';
import { NgModule,ElementRef, ViewChild, AfterViewInit} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent  {


}

new component:

import { Component, OnInit } from '@angular/core';
import { NgModule,ElementRef, ViewChild, AfterViewInit, AfterContentInit} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'


@Component({

    selector: 'app-sb',
    templateUrl: './sb/sb.component.html'
})
export class SBComponent  {



}

Any help would be greatly appreciated!

Suraj Rao
  • 28,186
  • 10
  • 88
  • 94
joeCarpenter
  • 1,255
  • 4
  • 17
  • 25

5 Answers5

30

If your component is inside the same directory, then you need to point your templateUrl to the same folder as well. Here is how you can do it:

@Component({
    selector: 'app-sb',
    templateUrl: './sb.component.html'
})
Idrees Khan
  • 7,404
  • 17
  • 59
  • 110
7

This problem is very well known, when we are using component relative paths for external html and css files. The problem of absolute path and relative path can be resolved just by adding metadata ModuleId in component.

Now what does ModuleId do? ModuleId contains the absolute URL of the component class [when the module file is actually loaded]

This ModuleId value is used by the Angular reflection processes and the metadata_resolver component to evaluate the fully-qualified component path before the component is constructed

It's very easy to use. Just add one more entry in @Component decorative. Full code example is below.

 @Component({
  moduleId: module.id,    // fully resolved filename; defined at module load time
  selector: 'app-sb',
  templateUrl: 'sb.component.html' //Observe this.
})
export class SBComponent  {

}
Osama AbuSitta
  • 3,521
  • 4
  • 31
  • 47
Jaydip Jadhav
  • 11,638
  • 6
  • 18
  • 36
  • 2
    This is worked for me: @Component({ moduleId:module.id, selector: 'my-demo', templateUrl: './input-text-validation.html' }) – Hari Gillala Jan 08 '18 at 16:30
3

My problem was the same as questioned here, my solution was quite different

code that was causing problem:

@Component({
    selector : 'app-header',
    templateUrl : './header.component.html',
    styleUrls : ['']
})

here by changing :

styleUrls : ['']

to this:

styles : ['']

helped me remove module not found error, thought someone might get this error due to this silly mistake, that's why shared my solution

  • I was using an in-line template and therefore had to change `templateUrl` to `template` also -- thanks for your answer; found this quickly – Schalton Jul 28 '20 at 03:10
2

Try to give relative path instead of absolute one.

It will fix the Solution.

Like : templateUrl = '../employee/employee.html' in your component.ts

Kamuran Sönecek
  • 3,088
  • 2
  • 24
  • 49
0

Ok, above solutions are excellent and must be used to see if it fixes your issue. But the same error message can be displayed if you have set the Template property. I had the issue when I created the component using ng g c and then it had templateUrl but I was writing some test html inside of templateUrl, thinking it is template. Hope this helps

Muniro
  • 1,099
  • 2
  • 9
  • 9