Nativescript angular 2 在另一个组件中重用组件

Nativescript angular2 reuse componentin other component

我正在使用 angular2 和 typescript 开发 nativescript 应用程序。

我有 imageComponentA、pageComponentB、pageComponentC 及其模块(imageModuleA、pageModuleB、pageModuleC)。

pageModuleB、pageModuleC 是路由中的页面。 imageModuleA 是图像(只是 <Image src="src"></Image>)。

如果我像下面这样在 pageModuleB 中声明 imageModuleA。 应用程序显示 imageModuleA 没有问题。

像这样

main.ts
    import { AppModule } from "./app.module";
    platformNativeScriptDynamic().bootstrapModule(AppModule);

app.module  (top module) 
    NgModule
        imports [pageModuleB, pageModuleC] 

pageModuleB
    NgModule
        declarations [imageComponentA] 
pageModuleC
    NgModule
        declarations [] 

然后我也想在 pageModuleC 中重用 imageModuleA。 如果我在 pageModuleC 的模块中声明 imageModuleA 它说 'imageComponentA is part of declaration of 2 modules. Conside moving higher module'

然后我将 imageModuleA 移动了一层到 app.module 并从 pageModuleB、pageModuleC

中删除了声明
app.module (top module) 
    NgModule
        imports [pageModuleB, pageModuleC] 
        declarations [imageComponentA]

pageModuleB
    NgModule
        declarations [] 
pageModuleC
    NgModule
        declarations [] 

它编译并运行应用程序,但 imageComponentA 未显示。

我以为是简单的angular2 NgModule嘛。 我做错了什么?


更新 1

我还尝试在 app.module

中导入 imageModuleA
main.ts
    import { AppModule } from "./app.module";
    platformNativeScriptDynamic().bootstrapModule(AppModule);

app.module (top module) 
    NgModule
        imports [imageModuleA, pageModuleB, pageModuleC] 
        declarations []

pageModuleB
    NgModule
        declarations [] 
pageModuleC
    NgModule
        declarations [] 

我认为你需要为这个开始保持简单,你不需要创建很多模块,只需要主应用程序模块就可以了,将你的 3 个组件添加到应用程序模块声明数组中。

查看下面相同的代码和输出的屏幕截图

// this import should be first in order to load some required settings (like globals and reflect-metadata)
import { platformNativeScriptDynamic, NativeScriptModule } from "nativescript-angular/platform";
import { NgModule, Component } from "@angular/core";

@Component({
    selector: "app-image",
    template: `<Image width="250" src="https://d2odgkulk9w7if.cloudfront.net/images/default-source/home/ns-angular-javascript-typescript.png?sfvrsn=2"></Image>
    `,
})
export class ImageComponent {
}

@Component({
    selector: "my-app",
    template: `
    <StackLayout>
    <app-image></app-image>
    <Label text="Tap the button" class="title"></Label>

    <Button text="TAP" (tap)="onTap()"></Button>

    <Label [text]="message" class="message" textWrap="true"></Label>
</StackLayout>`,
})
export class AppComponent {
    public counter: number = 16;

    public get message(): string {
        if (this.counter > 0) {
            return this.counter + " taps left";
        } else {
            return "Hoorraaay! \nYou are ready to start building!";
        }
    }

    public onTap() {
        this.counter--;
    }
}

@NgModule({
    declarations: [AppComponent, ImageComponent],
    bootstrap: [AppComponent],
    imports: [NativeScriptModule],
})
class AppComponentModule {}

platformNativeScriptDynamic().bootstrapModule(AppComponentModule);

希望对您有所帮助。

我成功了。我在 NgModule 中缺少导出