У меня есть автономный компонент, который я хочу использовать в неавтономном компоненте, не делая этот компонент также автономным. Это возможно? Я пробовал по-разному, но всегда получаю ошибки.
у меня есть этот компонент
import { ChangeDetectionStrategy, Component } from '@angular/core';
@Component({
selector: 'app-three-d-viewer',
standalone: true,
templateUrl: './three-d-viewer.component.html',
styleUrls: ['./three-d-viewer.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ThreeDViewerComponent {
}
Я хочу использовать is it my app.component, который является автономным компонентом.
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent {
}
Я хочу использовать это здесь
<div class = "layout">
<app-three-d-viewer></app-three-d-viewer>
</div>
и это мой app.module
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
HttpClientModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Я получаю эту ошибку
Error: src/app/app.component.html:2:3 - error NG8001: 'app-three-d-viewer' is not a known element:
1. If 'app-three-d-viewer' is an Angular component, then verify that it is part of this module.
2. If 'app-three-d-viewer' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
2 <app-three-d-viewer></app-three-d-viewer>
~~~~~~~~~~~~~~~~~~~~
src/app/app.component.ts:6:16
6 templateUrl: './app.component.html',
~~~~~~~~~~~~~~~~~~~~~~
Error occurs in the template of component AppComponent.
Я попробовал:
импортируйте автономный компонент в ThreeDViewerComponent неавтономный компонент AppComponent с помощью imports: [ThreeDViewerComponent], но получите ошибку Error: src/app/app.component.ts:8:12 - error NG2010: 'imports' is only valid on a component that is standalone.
Используя shared.module
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ThreeDViewerComponent } from './path/to/three-d-viewer.component';
@NgModule({
declarations: [ThreeDViewerComponent],
imports: [CommonModule],
exports: [ThreeDViewerComponent]
})
export class SharedModule {}
и импортирую его в AppModule, но получаю эту ошибку:
Error: src/app/app.module.ts:14:5 - error NG6002: This import contains errors, which may affect components that depend on this NgModule.
14 SharedModule
~~~~~~~~~~~~
Error: src/app/shared.module.ts:6:18 - error NG6008: Component ThreeDViewerComponent is standalone, and cannot be declared in an NgModule. Did you mean to import it instead?
6 declarations: [ThreeDViewerComponent],
~~~~~~~~~~~~~~~~~~~~~
Error: src/app/shared.module.ts:8:13 - error NG6004: Can't be exported from this NgModule, as it must be imported first
8 exports: [ThreeDViewerComponent]
~~~~~~~~~~~~~~~~~~~~~
× Failed to compile.
Что я могу сделать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Автономный компонент не может быть объявлен (массив объявлений), когда он является автономным, поэтому его необходимо импортировать (массив импорта) в модуль верхнего уровня, который может использоваться всеми компонентами в массиве объявлений!
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http';
import { ThreeDViewerComponent } from './path/to/three-d-viewer.component';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
HttpClientModule,
ThreeDViewerComponent, // <- changed here!
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Или вы можете импортировать его в общий модуль, но вам также необходимо его экспортировать, чтобы он был виден во всех компонентах, которые импортируют SharedModule!
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ThreeDViewerComponent } from './path/to/three-d-viewer.component';
@NgModule({
declarations: [],
imports: [CommonModule, ThreeDViewerComponent], // <- changed here!
exports: [ThreeDViewerComponent]
})
export class SharedModule {}
Вы получили ошибку для массива imports, потому что в автономном компоненте существует только массив imports, а в неавтономном компоненте нет массива импорта в объекте декоратора компонента!
Я понимаю. Это должно быть в импорте, а не в декларациях. Спасибо!