NativeScript:如何从主页显示侧边抽屉?
NativeScript: how to show the side drawer from the home page?
我正在使用 Angular 8 和 NativeScript 6.4.1 编写应用程序。
我想实现一个仅在按下主页上的汉堡包按钮时才会显示的侧边抽屉。我不希望它在任何其他时间显示。
我已阅读此文档:https://docs.nativescript.org/angular/ui/ng-components/ng-SideDrawer/getting-started#initialization
我尝试实现这个侧边抽屉,但它一直给我这个错误:
"TypeError: Cannot read property 'showDrawer' of undefined"
这是我的游乐场:
https://play.nativescript.org/?template=play-ng&id=ujiNiC&v=2
代码片段:
export class HomeComponent implements OnInit {
@ViewChild(SideDrawerComponent, { static: false }) public drawerComponent: SideDrawerComponent;
private drawer: RadSideDrawer;
constructor() {
}
ngOnInit(): void {
}
public openSideDrawer() {
this.drawer.showDrawer();
}
}
简而言之:
您没有以正确的方式设置 RadSideDrawer
。您需要在根视图中设置抽屉,并使用 tkDrawerContent
选择器标记抽屉内容,并使用 tkMainContent
选择器标记 angular 路由器。
详细的,您需要:
首先,将 RadSideDrawer
设置在您应用的最顶部组件,即在 app.component.html 上,以便有侧抽屉内容,用 tkDrawerContent
选择器标记,并且其余内容(您的应用程序的内容),用 tkMainContent
选择器标记。如果您使用的是 Angular 路由器,则将其添加到 <page-router-outlet></page-router-outlet>
,如下所示:
app.component.html:
<RadSideDrawer>
<GridLayout tkDrawerContent rows="auto, *">
<!-- content of the drawer -->
</GridLayout>
<page-router-outlet tkMainContent></page-router-outlet>
</RadSideDrawer>
您可以呈现您拥有 instead/inside 上面标记为 GridLayout 的 tkDrawerContent 的任何自定义组件。
其次,确保将 NativeScriptUISideDrawerModule
导入到加载组件的模块中,其中包含 <RadSideDrawer>
。在我的示例中,它是 app.module.
app.module.ts:
import { NativeScriptUISideDrawerModule } from 'nativescript-ui-sidedrawer/angular';
@NgModule({
bootstrap: [
AppComponent
],
imports: [
NativeScriptModule,
AppRoutingModule,
NativeScriptUISideDrawerModule
],
declarations: [
AppComponent
],
schemas: [
NO_ERRORS_SCHEMA
]
})
第三,open/close侧边抽屉,需要通过应用RootView访问。在你的组件中添加这些:
home.componenet.ts:
导入:
import { RadSideDrawer } from 'nativescript-ui-sidedrawer';
在你的 class 里面:
public openSideDrawer() {
const sideDrawer = <RadSideDrawer>app.getRootView();
sideDrawer.showDrawer();
}
如果您的应用变得非常复杂,包含多个页面和路由,那么您可以将代码添加到 open/close 抽屉中 ui 在根目录注入的服务,或共享的自定义 actionBar 组件.
您的示例的修复方法是 playground。
祝原生脚本编写愉快!
我正在使用 Angular 8 和 NativeScript 6.4.1 编写应用程序。
我想实现一个仅在按下主页上的汉堡包按钮时才会显示的侧边抽屉。我不希望它在任何其他时间显示。
我已阅读此文档:https://docs.nativescript.org/angular/ui/ng-components/ng-SideDrawer/getting-started#initialization
我尝试实现这个侧边抽屉,但它一直给我这个错误:
"TypeError: Cannot read property 'showDrawer' of undefined"
这是我的游乐场: https://play.nativescript.org/?template=play-ng&id=ujiNiC&v=2
代码片段:
export class HomeComponent implements OnInit {
@ViewChild(SideDrawerComponent, { static: false }) public drawerComponent: SideDrawerComponent;
private drawer: RadSideDrawer;
constructor() {
}
ngOnInit(): void {
}
public openSideDrawer() {
this.drawer.showDrawer();
}
}
简而言之:
您没有以正确的方式设置 RadSideDrawer
。您需要在根视图中设置抽屉,并使用 tkDrawerContent
选择器标记抽屉内容,并使用 tkMainContent
选择器标记 angular 路由器。
详细的,您需要:
首先,将 RadSideDrawer
设置在您应用的最顶部组件,即在 app.component.html 上,以便有侧抽屉内容,用 tkDrawerContent
选择器标记,并且其余内容(您的应用程序的内容),用 tkMainContent
选择器标记。如果您使用的是 Angular 路由器,则将其添加到 <page-router-outlet></page-router-outlet>
,如下所示:
app.component.html:
<RadSideDrawer>
<GridLayout tkDrawerContent rows="auto, *">
<!-- content of the drawer -->
</GridLayout>
<page-router-outlet tkMainContent></page-router-outlet>
</RadSideDrawer>
您可以呈现您拥有 instead/inside 上面标记为 GridLayout 的 tkDrawerContent 的任何自定义组件。
其次,确保将 NativeScriptUISideDrawerModule
导入到加载组件的模块中,其中包含 <RadSideDrawer>
。在我的示例中,它是 app.module.
app.module.ts:
import { NativeScriptUISideDrawerModule } from 'nativescript-ui-sidedrawer/angular';
@NgModule({
bootstrap: [
AppComponent
],
imports: [
NativeScriptModule,
AppRoutingModule,
NativeScriptUISideDrawerModule
],
declarations: [
AppComponent
],
schemas: [
NO_ERRORS_SCHEMA
]
})
第三,open/close侧边抽屉,需要通过应用RootView访问。在你的组件中添加这些:
home.componenet.ts:
导入:
import { RadSideDrawer } from 'nativescript-ui-sidedrawer';
在你的 class 里面:
public openSideDrawer() {
const sideDrawer = <RadSideDrawer>app.getRootView();
sideDrawer.showDrawer();
}
如果您的应用变得非常复杂,包含多个页面和路由,那么您可以将代码添加到 open/close 抽屉中 ui 在根目录注入的服务,或共享的自定义 actionBar 组件.
您的示例的修复方法是 playground。
祝原生脚本编写愉快!