首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用两个共享模块的Angular 6: Component不是已知元素:

在Angular 6中,如果你遇到错误信息“Component不是已知元素”,这通常意味着Angular编译器在尝试编译包含该组件的模板时找不到该组件的定义。这种情况可能发生在以下几种情况:

基础概念

在Angular中,组件是构建用户界面的基本单元。每个组件都有一个对应的模块,这个模块负责声明和导出组件,以便其他模块可以使用它。

相关优势

  • 模块化:通过模块化,可以将应用分割成更小、更易于管理的部分。
  • 可重用性:组件可以在不同的模块和项目中重用。
  • 封装性:每个组件都有自己的模板、控制器和样式,这有助于保持代码的整洁和可维护性。

类型

  • 根模块:应用的入口点,通常命名为AppModule
  • 特性模块:包含特定功能的模块,例如用户管理、产品列表等。

应用场景

  • 共享模块:用于存放可以在多个特性模块之间共享的组件、指令和管道。
  • 核心模块:用于存放单例服务和核心组件,这些通常只在应用的根注入器中提供一次。

问题原因

出现“Component不是已知元素”的错误可能有以下原因:

  1. 未在模块中声明组件:组件没有在其所属模块的declarations数组中声明。
  2. 未导出组件:如果其他模块需要使用该组件,它必须在所属模块的exports数组中导出。
  3. 导入错误:尝试使用组件的模块没有正确导入包含该组件的模块。

解决方法

假设我们有两个共享模块SharedModuleASharedModuleB,以及一个组件MyComponent,我们希望在两个模块之间共享这个组件。

  1. 在共享模块中声明和导出组件
代码语言:txt
复制
// shared-module-a.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MyComponent } from './my-component/my-component.component';

@NgModule({
  declarations: [
    MyComponent
  ],
  imports: [
    CommonModule
  ],
  exports: [
    MyComponent
  ]
})
export class SharedModuleA {}
代码语言:txt
复制
// shared-module-b.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SharedModuleA } from '../shared-module-a/shared-module-a.module';

@NgModule({
  imports: [
    CommonModule,
    SharedModuleA // 导入包含MyComponent的模块
  ]
})
export class SharedModuleB {}
  1. 在使用组件的模块中导入共享模块
代码语言:txt
复制
// app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { SharedModuleB } from './shared-module-b/shared-module-b.module';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    SharedModuleB // 导入共享模块
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
  1. 在模板中使用组件
代码语言:txt
复制
<!-- app.component.html -->
<app-my-component></app-my-component>

通过以上步骤,MyComponent就可以在AppModule中使用了,因为它已经被SharedModuleA声明并导出,然后被SharedModuleB导入,最后被AppModule导入。

确保所有相关的模块都正确地声明、导入了组件,并且在模板中正确地使用了组件标签。这样就可以解决“Component不是已知元素”的问题。

相关搜索:Angular 7无法绑定到<property>,因为它不是<component>的已知属性(来自导入的模块)无法绑定到属性,因为它不是Angular中“component”的已知属性mat-form-field‘不是angular中的已知元素无法绑定到'ngModel‘,因为它不是Angular 6中'input’的已知属性Angular 11.0.3无法绑定到指令,因为它不是元素的已知属性无法绑定到指令,因为它不是元素Angular AOT的已知属性使用共享模块的未知角度元素出错Angular Component使用另一个使用导入模块的组件-组织?Angular 6,个别延迟加载模块中的共享模块导致应用程序无法处理更改sl-button不是一个已知的元素-将css库导入AngularAngular 6-声明彼此具有多个模块的两个组件带有Angular 9 basic安装的CKEditor5导致"'ckeditor‘不是一个已知元素:’“使用ng2-bootstrap with Angular 2 RC 6-无法绑定到无法绑定到[...]因为它不是[...]的已知属性如何在angular2中的两个模块之间共享服务子模块中的Angular 6路由器链路和父模块中的路由器插座(app.component)为什么angular使用的是` `import { SomeComponent } from‘ome.Component.ts’`而不是` `import from‘ome.Component.ts’`呢?功能模块内的角度对话框抛出错误'mat- dialog -content‘不是已知元素如何使用Jasmine测试Angular 6的ng容器中封装的元素?如果不使用共享模块,我如何定义在所有延迟加载的Angular模块中使用的global @pipe()?使用自定义单元格编辑器时出现Go错误:'ag-grid-angular‘不是已知元素
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

运行时编译 Worker服务模板 gRPC模板 Angular模板已更新为Angular 7 SPA认证 SignalR与Endpoint路由集成 SignalR Java客户端支持长轮询 其他详细信息和已知问题...本节将会介绍我们在该预览更新中对Razor组件所做的各种改进。 单项目模板 Razor组件项目模板现在是单个项目,而不是同一解决方案中的两个项目。...,并指定根组件App应该在匹配选择器App的DOM元素中呈现。...如果要在库中创建可与Blazor和Razor组件应用程序共享的组件,仍然需要使用Blazor类库。这写问题会在未来的更新中解决。...Angular模块所构建的身份验证和授权支持,可以导入到您的应用程序中,并提供一套组件和服务来增强主应用程序模块的功能。

22.7K10

Angular Provider 作用域

当你注册根级别的服务时,Angular 会创建一个单独的共享服务实例。如果在 @Injectable 元数据中注册服务,Angular 会在构建阶段自动剔除无用的服务,进而优化我们的应用程序。...这表示这两个模块之间是共享同一个 UserService 实例。 为什么会这样呢?...此外,当我们导入的两个模块中,共用同一个 Token 来配置 provider, 后面导入的模块将会生效。...如果在多个特性模块中,使用同一个 token 注册 provider,此外在根模块中同样也注册了相同的 provider,只有根模块中注册的 provider 会被添加到根注入器中,此后所有的特性模块将会共享同一个实例...当在懒加载的模块中使用模块外的服务时,它将使用根注入器创建的服务实例。但如果已经在懒加载模块中注册了 provider,在模块内获取对应的服务时,它将从模块的子注入器中获取对应的服务实例。

1.8K20
  • Angular 从入坑到挖坑 - 组件食用指南

    (非必须) 当通过命令行创建一个新的组件之后,会自动将新创建的组件注册到应用的根模块(app.module.ts)中 ?...因此,这里应该使用模板引用变量的方式获取数据信息。 模板引用变量是对模板中 DOM 元素的引用,提供了从模块中直接访问元素的能力。...="expr">NgIf 结构型指令 当 expr 属性为 true 时,这个元素则会显示在页面上,当属性值为 false 时,则不显示该元素 ngIf 指令并不是通过使用 css 样式来隐藏元素的...NgSwitch 本身是一个属性型指令,它不会直接操作 dom 元素,而是通过它所控制的两个结构型指令(NgSwitchCase、ngSwitchDefault)来操作 dom 元素 4.3、管道 在使用模板表达式绑定数据时...4.4.4、非父子组件之间的通信 不管组件之间是否具有关联关系,都可以通过共享一个服务的方式来进行数据交互,也可以将需要进行共享的数据存储到一些存储介质中,通过直接读取这个存储介质中的数据进行通信 创建一个服务

    15.8K30

    AngularDart4.0 指南-体系结构概述 顶

    您可以通过使用Angular的标记组合HTML 模板,编写组件类来管理这些模板,在服务中添加应用程序逻辑以及在模块中装入组件和服务来编写Angular应用程序。 然后,通过引导根模块启动应用程序。...= null" [hero]="selectedHero"> 虽然这个模板使用了典型的HTML元素,如和,但它也有一些不同之处。...添加绑定标记到模板HTML告诉Angular如何连接双方。 如图所示,有四种形式的数据绑定语法。 每个表单都有一个方向 - 从DOM到DOM,或者在两个方向。...示例模板使用两个内置的结构指令: lib / src / hero_list_component.html(structural) 的服务与应用程序组件树中的所有组件的后代共享。 引导时注册提供程序的情况非常少见。 有关详细信息,请参阅依赖注入页面的配置注入部分。

    7.9K30

    AngularJS2.0 教程系列(一)

    Rob Eisenberg / Angular 2.0 Team ES6工具链 要让Angular2应用跑起来不是件轻松的事,因为它用了太多还不被当前主流浏览器支持 的技术。...等各种格式的JS模块加载 es6-module-loader - ES6模块加载器,systemjs会自动加载这个模块 traceur - ES6转码器,将ES6代码转换为当前浏览器支持的ES5...引入Angular2预定义类型 import {Component,View,bootstrap} from "angular2/angular2"; import是ES6的关键字,用来从模块中引入类型定义...据称,注解的功能就是Angular2团队向traceur团队提出的,这不是traceur的默认选项, 因此你看到,我们配置systemjs在使用traceur模块时打开注解: System.config...以组件为核心 在Angular1.x中,bootstrap是围绕DOM元素展开的,无论你使用ng-app还是手动执行bootstrap()函数,自举过程是建立在DOM之上的。

    2.5K10

    Angular8稳定版修改概述

    Ivy渲染引擎实验 虽然早在angular 6的时候就提出了Ivy,但是Ivy仍处于试验阶段,通过Angular 8版本,您可以通过创建一个enable-ivy标志设置为true 的应用程序来测试它,如下所示...Bazel将提供以下优势: 更快的构建时间(对于第一次构建需要时间,但并发构建将更快),Angular已经在使用它,现在CI在7.5分钟内完成,而不是在Bazel之前的60分钟。...懒加载的变动 新版本不推荐使用loadChildren:string 懒惰加载模块的语法。 在8.0.0之前,懒加载的使用方法如下: loadChildren: '....现在它将共享全局实例DomElementSchemaRegistry....包还是跟以前保持一样的。 结论 以上就是angular 8版本的一些改动。总体来说变化不是很大,延续了angular每年一个稳定版的习惯。 原文链接

    4.5K20

    Angular快速学习笔记(2) -- 架构

    但是,任何模块都能包含任意数量的其它组件,这些组件可以通过路由器加载,也可以通过模板创建。那些属于这个 NgModule 的组件会共享同一个编译上下文环境。 ?...例如,从 @angular/core 库中导入 Component 装饰器: import { Component } from '@angular/core'; 还可以使用 JavaScript 的导入语句从...1.2.1 组件定义 使用@Component 装饰器来标识一个组件类,并为其指定元数据 @Component({ selector: 'app-hero-list', templateUrl...组件其实也是一个指令,但是组件非常独特、非常重要,因此 Angular 专门定义了 @Component 装饰器,它使用一些面向模板的特性扩展了 @Directive 装饰器。 ?...service,最好再root模块中provide,这样方便一个实例实现共享和通信。

    5.3K20

    前端框架与库 - Angular基础:组件、模板、服务

    示例代码 import { Component } from '@angular/core'; @Component({ selector: 'app-root', template: `...事件绑定:(event)="function()",用于绑定组件类中的方法到元素的事件。 服务 服务是 Angular 中用于封装业务逻辑的类,通常用于数据获取、状态管理等。...服务可以通过依赖注入系统在整个应用中共享和复用。...应该通过服务、事件发射器或共享状态管理来实现组件间的通信。 性能问题 过度使用ngFor和ngIf可能导致不必要的渲染。优化这些指令的使用,例如,使用TrackBy函数减少重复渲染。...性能优化 对于大型列表,使用虚拟滚动技术来提高性能。 服务注入范围 理解并正确设置服务的注入范围,如'root'、'singleton'或在特定模块中。

    23410

    angular知识点梳理第二篇-基本语法

    在需要使用数据绑定的组件进行数据的处理 import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-home...:hidden是要区别开的,当if判断为false的时候,页面上是整个元素都消失了,而不是仅仅隐藏了css样式 在需要使用数据绑定的组件进行数据的处理 import { Component, OnInit...是基本一致的,不是完全一致,我们可以将它看作一个承载体,也就是说我们无法进行包裹判断的一些元素或者段落可以使用这个进行包裹,因为他是一个不被渲染的tag,所以使用的时候是没有什么问题的,举个例子!...运行效果 如果这个tag标签不太理解的,你可以将它完全当作一个容器,当你需要对一段内容控制逻辑的时候但是不知道使用什么元素标签的时候就可以使用这个,在html的任何场景下都可以使用!...官方的话:为没有 DOM 元素的指令安排宿主 管道 管道其实就是具有一定功能的函数,主要是一些场景是对字符串什么的进行简单的转化,当然我们也可以自己使用自定义的函数进行数据的转换,只是angular给我们提供了一些初始化的功能函数管道详细列表

    2.6K30

    Angular学习(01)-架构概览

    其实,如果前端网站并不是特别复杂,那么使用 Angular 无非也就是常跟几个重要的知识点打交道,在官网的核心知识的第一节中就将这些知识点罗列出来了,也就是:架构概览。 ?...当然,模块之间可以有交互,模块可以依赖于另一模块,模块内的可以共享资源等等,所以,NgModel 中有许多需要配置的声明项,比如: declarations:声明属于本模块内的组件、指令、管道 providers...在 Angular 中,大多数的模式就是,一个根模块管理着很多功能模块,然后,每个模块管理自己模块内部所使用到的组件、指令、管道、服务、或者需要依赖于其他模块,如果该模块内部的这些角色,有些可以供其他模块使用...有两个时机,一是组件被直接调用;二是触发了路由去加载; 路由通常的配置方式是用一个 @NgModel 声明的模块,但只用其中两项配置:imports 和 exports,imports 用来导入当前模块所有组件与...在以往,如果需要动态的更新 DOM 上的信息时,需要先获取到相对应的元素实例对象,然后调用相应的 DOM API 来操纵 DOM; 而使用 Angular 的话,可以直接在模板的相应元素中,将某个属性与

    3.7K50

    Angular 1 vs. Angular 2 深度比较

    这些模块的例子都不是异步加载的,以 AMD 模块为例,根据他们的依赖性列出第一次的加载所需的依赖。...而 Angular 2 则没有这样的问题,假如我们选择npm, 我们完全可以利用新型的ES6 模块加载器,ES6通过利用es6-module-loader pollyfill 使其变成一个标准的同步模块加载器...当前还没有办法同一名字有两个不同实现的两个服务,这就会阻止用一个安全的方式从 Angular 1 实现延迟加载。...比如 image 元素用提供的 url 立即加载图片。 这也是为什么需要像 ng-src 这样的属性来克服这个问题。 Angular 2 如何做到更好地跟 Web Components 交互?...目标:为服务器端渲染提供支持 支持服务器端的渲染对于搜索引擎的优化和用户感知体验来说是非常重要的;在一个比较大型的Angular 1 的应用中,即使使用了预先定义的缓存模块,我们可以清楚地看到当应用开始启动时

    2.8K100

    Angular 2 + 折腾记 :(2)初步认识angular2,不一样的开发模式

    ---- 基础概念 国内的官网--基础 词汇表(又名计算机术语--angular2 & es6 & es7) 速查表:又名demo写法表,里面涵盖了很多写法,相当于一本小字典 关于ng2的一堆为什么:...@Component({ selector: 'app-root', // 自定义元素 templateUrl: '....'@angular/platform-browser'; // 这也是一个装饰器,用来定义模块和组件相关的,比如服务,组件元素,指令,导入导出模块的识别 // 每个模块的定义必须有这个才能生效...,ng2的开发模式就是类似一个树,从根节点无限发散 import { NgModule } from '@angular/core'; // 表单模块,比如你要在组件内用到一些表单元素或者数据绑定...---- 总结 这一篇没有涉及到路由这些和表单这些; 准备拆成两个文章来说; 路由的配置及懒加载这些, 模板驱动的表单及响应式表单[嵌套表单响应等],回车键触发搜索等。。

    6.2K20

    angular面试题及答案_angular面试

    组件和指令的区别 component使用注解@Component修饰,directive使用注解@Directive修饰 component是组件化思想,基于组件创建应用,把应用划分成细小的可重复利用的组件...,而directive用来在已经存在的DOM元素上实现一些行为 component是可重复使用的组件,directive是可重复使用的行为 component可创建一个view,即template或templateUrl...module声明了哪些模块可以被其他模块使用,依赖注入了哪些类,以及启动的component,模块来管理组件,使app实现模块化。 21. 怎样在组件中选择一个元素?...Angular的懒加载 默认情况下,在初始化的时候所有路由都会加载,导致加载缓慢,启动速度慢,所以可以使用懒加载 懒加载 : 通俗 的讲就是进入主模块之后,子模块不加载,等真正访问到子模块之后,再去加载...6)如果应用程序较大时,我会考虑延迟加载而不是完全捆绑的应用程序。 27. 使用Angular的好处 可以添加自定义的directive. 优秀的社区支持。 客户端和服务器的通讯非常便利。

    11.3K120

    Angular 5.0.0发布!

    构建优化器是CLI中的一个工具,它基于我们对你Angular应用的理解,可以把构建后的包变得更小。 构建优化器有两个主要任务。...上述两项优化都可以减少生成JS包的大小,同时加快应用启动速度。 Angular Universal状态转交API及对DOM的支持 这样更便于在服务端和客户之间共享应用状态。...这个模块可以帮开发者在服务端渲染生成的内容中加入相关信息,然后传送给客户端,从而避免重复生成。这对于通过HTTP获取数据的场景是很有用的。...要升级HttpClient,需要在每个模块的 @angular/common/http中把 HttpModule替换为 HttpClientModule,注入HttpClient服务,删除所有 map(...我们删除很多以前废弃的API(如 OpaqueToken),也公布了一些新的废弃项。以上指南会详细介绍这些变更。 已知问题 当前已知与source map相关的问题。

    4.4K40

    AngularDart4.0 高级-组件样式 顶

    Angular应用程序使用标准CSS进行样式化。 这意味着您可以将所有关于CSS样式表,选择器,规则和媒体查询的知识直接应用于Angular应用程序。...此外,Angular可以将组件样式与组件捆绑在一起,从而实现比常规样式表更多的模块化设计。 本页介绍如何加载和应用这些组件样式。 运行此页面中显示的代码的实例(查看源代码)。...:host 使用:host伪类选择器来定位承载组件的元素中的样式(而不是定位组件模板中的元素)。...您不能使用其他选择器从组件内部到达宿主元素,因为它不是组件自己的模板的一部分。宿主元素位于父组件的模板中。...使用emulated视图封装的处于运行状态的Angular应用中的DOM, 每一个DOM元素都有额外的类附加在上面: <h2

    2.2K20

    angular基础面试题_java web面试题

    angular用管道转换数据 Angular 为典型的数据转换提供了内置的管道,包括国际化的转换(i18n),它使用本地化信息来格式化数据。...exports: [ AppComponent ], 导出表 那些能在其它模块的组件模板中使用的可声明对象的子集。...}) 在 Angular 中有三种类型的指令: 组件 — 拥有模板的指令 结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令 属性型指令 — 改变元素、组件或其它指令的外观和行为的指令...Angular 2是一个平台,不仅是一种语言 更好的速度和性能 更简单的依赖注入 模块化,跨平台 具备ES6和Typescript的好处。...通过限制api,选择使用已知或安全环境/浏览器的app来防止XSRF攻击、 Angular变化监测 : event:绑定event事件,数据变化视图更新 timeout,延迟触发 版权声明:本文内容由互联网用户自发贡献

    13K50

    Angualr2 之 angular模块Angular 模块化提供服务特性模块 - 业务上的最佳实践(n)共享模块XxxModule.forRoot配置核心服务知识点

    它可以向应用的依赖注入器中添加服务提供商。 Angular 模块化 模块是组织应用程序和使用使用外部程序库的最佳途径。 很多Angular库都是模块,e.g..../sino-file-list.component.css'], providers: [FileService], }) 在模块创建中提供服务 在模块创建中提供服务,可以在该模块的任何组建个中依赖注入然后使用...特性模块 - 业务上的最佳实践(n) 根模块和特性模块共享着相同的执行环境。它们共享着同一个依赖注入器,这意味着某个模块中定义的服务在所有模块中也都能用到。...特性模块通过自己提供的服务和它决定对外共享的那些组件、指令、管道来与根模块等其它模块协同工作。 共享模块 共享模块其实就是将一些公共的东西整理出来,放到一个模块中去,避免了其他模块的重复导入。...✔️如果两个指令同名,那么我们需要使用as关键字来为第二个指令创建别名。

    2.2K30
    领券