【问题标题】:Nativescript: Cannot overwrite ActionBar in templateNativescript:无法覆盖模板中的 ActionBar
【发布时间】:2016-10-26 09:44:27
【问题描述】:

我目前正在学习 Nativescript,想用 Angular2 实现一个示例 Android 应用。

当我路由到一个组件,该组件将使用自定义标题和导航按钮覆盖模板中的默认可见起始页 ActionBar,没有任何反应。

带有自定义 ActionBar 的我的组件:

@Component({
  template: `
  <ActionBar title="CustomTitle">
    <NavigationButton text="Back" android.systemIcon="ic_menu_back"></NavigationButton>
  </ActionBar>

   <StackLayout>
        <Label text="Hello World" textWrap="true"></Label>
        <page-router-outlet></page-router-outlet>
    </StackLayout>
  `
})
export class TestComponent {}

标题只能由page.actionBar.title = "MyGoals" 以编程方式更改,但在这种情况下我不希望这样。

我试图依靠 Nativescript ActionBar Doc 和 Sample Groceries 似乎实现类似。

要更改 Android 应用模板中的 ActionBar,必须采取哪些不同的措施?


更新

当我使用 this 代码并在功能模块中分离 TestComponent 时,操作栏不再适用于 TestComponent - 它显示默认标题。

// main.ts
import { platformNativeScriptDynamic, NativeScriptModule } from "nativescript-angular/platform";
import { NgModule, Component } from "@angular/core";
import { Routes } from "@angular/router";
import { NativeScriptRouterModule } from "nativescript-angular/router";

@Component({
    template: `<page-router-outlet></page-router-outlet>`
})
export class AppComponent { }

@Component({
    template: `
        <ActionBar title="Home"></ActionBar>
        <StackLayout>
            <Label text="Home component" textWrap="true"></Label>
            <Button text="test" [nsRouterLink]="['/test']"></Button>
        </StackLayout>
    `
})
export class HomeComponent { }

@Component({
    template: `
        <ActionBar title="Test"></ActionBar>
        <StackLayout>
            <Label text="Test component" textWrap="true"></Label>
            <Button text="home" [nsRouterLink]="['/']"></Button>
        </StackLayout>
    `
})
export class TestComponent { }


const testRoutes: Routes = [
    {
        path: "test",
        component: TestComponent
    }
]

@NgModule({
    declarations: [TestComponent],
    imports: [
        NativeScriptRouterModule.forChild(testRoutes)
    ],
})
class TestComponentModule { }


const appRoutes: Routes = [
    {
        path: "",
        pathMatch: "full",
        component: HomeComponent
    }
]

@NgModule({
    declarations: [AppComponent, HomeComponent],
    bootstrap: [AppComponent],
    imports: [
        NativeScriptModule,
        NativeScriptRouterModule,
        NativeScriptRouterModule.forRoot(appRoutes),
        TestComponentModule
    ],
})
class AppComponentModule { }

platformNativeScriptDynamic().bootstrapModule(AppComponentModule);

【问题讨论】:

    标签: angular nativescript angular2-nativescript


    【解决方案1】:

    那里! 您的配置似乎有效。虽然,&lt;page-router-outlet&gt; 标记在TestComponent 中没有意义。这是一个简单的 nativescript-angular 应用程序,可以正确更新操作栏:

    // main.ts
    import { platformNativeScriptDynamic, NativeScriptModule } from "nativescript-angular/platform";
    import { NgModule, Component } from "@angular/core";
    import { Routes } from "@angular/router";
    import { NativeScriptRouterModule } from "nativescript-angular/router";
    
    @Component({
        template: `<page-router-outlet></page-router-outlet>`
    })
    export class AppComponent { }
    
    @Component({
        template: `
            <ActionBar title="Home"></ActionBar>
            <StackLayout>
                <Label text="Home component" textWrap="true"></Label>
                <Button text="test" [nsRouterLink]="['/test']"></Button>
            </StackLayout>
        `
    })
    export class HomeComponent { }
    
    @Component({
        template: `
            <ActionBar title="Test"></ActionBar>
            <StackLayout>
                <Label text="Test component" textWrap="true"></Label>
                <Button text="home" [nsRouterLink]="['/']"></Button>
            </StackLayout>
        `
    })
    export class TestComponent {}
    
    const routes: Routes = [
        {
            path: "",
            pathMatch: "full",
            component: HomeComponent
        },
        {
            path: "test",
            component: TestComponent
        }
    ]
    
    @NgModule({
        declarations: [ AppComponent, HomeComponent, TestComponent ],
        bootstrap: [ AppComponent ],
        imports: [
            NativeScriptModule,
            NativeScriptRouterModule,
            NativeScriptRouterModule.forRoot(routes)
        ],
    })
    class AppComponentModule {}
    
    platformNativeScriptDynamic().bootstrapModule(AppComponentModule);
    

    【讨论】:

    • 感谢您的详细示例,您的应用也适用于我。我用稍微调整的代码版本更新了我的问题。如果我在功能模块中分离 TestComponent,ActionBar 将不再工作......
    • 您应该将NativescriptModule 导入您的新功能模块:)。
    • 成功了 :)。我必须在每个功能模块中设置 NativeScriptModule 和 NativeScriptRouterModule。
    • 您也可以添加一个SharedModule 来导出所有通用(共享)模块、指令、组件等。然后您可以在所有功能模块中仅导入SharedModule。以NG2 Docs 为例。
    • NativeScriptRouterModule.forChild 将页面创建为共享模块时,nativescript 似乎找不到它们
    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2015-10-01
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多