Angular 2: Module not found: Error: Can't resolve

Angular 2: Module not found: Error: Can't resolve

我有一个使用 Angular-CLI 创建的简单应用程序,我想重构并将 app.component.ts 代码移动到单独的组件文件中并开始出现严重错误:

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

这是我拥有的:

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  {


}

新组件:

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  {



}

如有任何帮助,我们将不胜感激!

如果您的组件位于同一目录中,那么您也需要将 templateUrl 指向同一文件夹。方法如下:

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

当我们为外部 html 和 css 文件使用组件相对路径时,这个问题是众所周知的。绝对路径和相对路径的问题只需在组件中添加元数据ModuleId即可解决

现在 ModuleId 有什么作用? ModuleId包含组件的绝对值URLclass[实际加载模块文件时]

ModuleId 值被 Angular 反射过程和 metadata_resolver 组件用来评估之前的完全限定组件路径组件构造

使用起来非常简单。只需在 @Component 装饰器中再添加一个条目即可。完整代码示例如下。

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

}

尝试给出相对路径而不是绝对路径。

它将修复解决方案。

赞:templateUrl = '../employee/employee.html' 在你的 component.ts

我的问题和这里问的一样,我的解决方案大不相同

导致问题的代码:

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

此处通过更改:

styleUrls : ['']

对此:

styles : ['']

帮助我删除了模块未找到错误,认为有人可能会因为这个愚蠢的错误而收到此错误,这就是分享我的解决方案的原因

好的,以上解决方案非常好,必须使用它来查看它是否可以解决您的问题。但是,如果您设置了模板 属性,则会显示相同的错误消息。当我使用 ng g c 创建组件然后它有 templateUrl 但我在 templateUrl 中编写一些测试 html 时,我遇到了问题,认为它是模板。希望这有帮助

一位 React 开发人员向我展示了一些东西。 转到你的 tsconfig.json 并在外花括号 {} 里面你有所有 json 选项和代码,把这个

"include": [
    "src/app"
]
//if all your components files are in app, you can do this so as to make importation easy. You can just call the component. It should work for you.

从这里您可以轻松地使用没有太多斜杠/和点的导入。就像我的代码一样,

import { Component, OnInit, Input, Injectable, NgModule } from '@angular/core';
import { products } from "product";
//instead of import { products } from ".../../product"; which will still import but might show error.
import { FormsModule } from '@angular/forms';




@Component({
  selector: 'app-product-list',
  templateUrl: './product-list.component.html',
  styleUrls: ['./product-list.component.scss'],
  providers:  [
    FormsModule
  ]
})



export class ProductListComponent implements OnInit {

 products = products;


onNotify() {
  window.alert("You will be notified when the product goes on discount")
}

share() {
  window.alert('The Product Has Been Added To Your Cart')
}


  constructor() {

   }

  ngOnInit(): void {
  }

}