20

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

找不到模块:错误:无法解析“./sb/sb.component.html”(我的 SBComponent)。在下面

这就是我所拥有的:

应用程序模块:

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 { }

应用程序组件:

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  {



}

任何帮助将不胜感激!

4

6 回答 6

31

如果您的组件在同一个目录中,那么您也需要将您的组件指向templateUrl同一个文件夹。您可以这样做:

@Component({
    selector: 'app-sb',
    templateUrl: './sb.component.html'
})
于 2017-03-07T14:25:29.717 回答
7

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

现在 ModuleId 做什么?ModuleId 包含组件类的绝对 URL [模块文件实际加载时]

Angular 反射过程和 metadata_resolver 组件使用此ModuleId值在组件构建之前评估完全限定的组件路径

它非常易于使用。只需在 @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  {

}
于 2017-10-31T06:03:53.773 回答
3

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

导致问题的代码:

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

在这里通过改变:

styleUrls : ['']

对此:

styles : ['']

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

于 2019-10-05T18:49:29.360 回答
2

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

它将修复解决方案。

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

于 2018-08-08T12:05:15.413 回答
0

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

于 2020-06-24T15:33:51.593 回答
0

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 {
  }

}
于 2021-08-15T03:49:43.670 回答