UI 组件
Page
用于表示应用程序屏幕的 UI 组件,用户可以导航到这些屏幕。
<Page>
是一个 UI 组件,用于表示用户可以通过 Frame 导航到的屏幕。除了 ActionBar 有其自己的特殊“插槽”外,Page 本身只能包含一个子视图。
<Page>
<ActionBar title="MyApp" />
<!-- the main content - must be a single view -->
<GridLayout>
<Label text="Main Content" />
</GridLayout>
</Page>
Page 生命周期
页面在导航过程中会发出各种事件,您可以使用这些事件来更新应用程序中的数据/状态。
生命周期事件示例
向前和向后导航
# frame.navigate(mainPage) - initial navigation
mainPage > navigatingTo (isBackNavigation: false)
mainPage > loaded
mainPage > navigatedTo (isBackNavigation: false)
# frame.navigate(detailsPage)
mainPage > navigatingFrom (isBackNavigation: false)
detailsPage > navigatingTo (isBackNavigation: false)
detailsPage > loaded
mainPage > unloaded
mainPage > navigatedFrom (isBackNavigation: false)
detailsPage > navigatedTo (isBackNavigation: false)
# frame.goBack()
detailsPage > navigatingFrom (isBackNavigation: true)
mainPage > navigatingTo (isBackNavigation: true)
mainPage > loaded
detailsPage > unloaded
detailsPage > navigatedFrom (isBackNavigation: true)
detailsPage > disposeNativeView # since it's no longer in the backstack
mainPage > navigatedTo (isBackNavigation: true)
向前导航并清除历史记录
# frame.navigate(mainPage) - initial navigation
mainPage > navigatingTo (isBackNavigation: false)
mainPage > loaded
mainPage > navigatedTo (isBackNavigation: false)
# frame.navigate(detailsPage, { clearHistory: true })
mainPage > navigatingFrom (isBackNavigation: false)
detailsPage > navigatingTo (isBackNavigation: false)
detailsPage > loaded
mainPage > unloaded
mainPage > navigatedFrom (isBackNavigation: false)
mainPage > disposeNativeView
detailsPage > navigatedTo (isBackNavigation: false)
# frame.goBack() - no-op, there's nothing in the backstack.
向前导航,不创建后退栈条目
# frame.navigate(mainPage, { backstackVisible: false }) - initial navigation
mainPage > navigatingTo (isBackNavigation: false)
mainPage > loaded
mainPage > navigatedTo (isBackNavigation: false)
# frame.navigate(detailsPage)
mainPage > navigatingFrom (isBackNavigation: false)
detailsPage > navigatingTo (isBackNavigation: false)
detailsPage > loaded
mainPage > unloaded
mainPage > navigatedFrom (isBackNavigation: false)
mainPage > disposeNativeView # since backstackVisible: false, we won't be able to reach mainPage after this point
detailsPage > navigatedTo (isBackNavigation: false)
示例
获取对当前 Page 的引用
NativeScript 提供了多种访问当前 Page 实例的方法。
通过 Page 事件
Page 发出的任何事件都将通过 args.object
引用 Page 本身。例如
// loaded event
onPageLoaded(args: LoadEventData) {
const page = args.object as Page;
}
// navigatedTo event
onNavigatedTo(args: NavigatedData) {
const page = args.object as Page;
}
通过 Page 内任何 View 的 page 属性
嵌套在 Page 层次结构中的任何 View 都可以通过 page
属性访问 Page。
onTap(args: EventData) {
const button = args.object as Button
const page = button.page as Page;
}
通过 Frame 实例的 currentPage 属性
当前显示的页面可以通过 Frame 访问,要获取对 Frame 的引用,可以使用 Frame.topmost()
,例如
import { Frame } from '@nativescript/core'
const frame = Frame.topmost()
const page = frame.currentPage // Page
请参阅 Frame,获取 Frame 实例。
处理各种 Page 事件
页面在其生命周期中会发出各种事件,包括导航事件和一般的 View 事件,例如 loaded
/unloaded
/layoutChanged
等。
<Page
loaded="onLoaded"
unloaded="onUnloaded"
navigatedFrom="onNavigatedFrom"
navigatedTo="onNavigatedTo"
navigatingFrom="onNavigatingFrom"
navigatingTo="onNavigatingTo"
layoutChanged="onLayoutChanged"
>
<ActionBar title="MyApp" />
<!-- ... -->
</Page>
onLoaded(args: EventData) {
const page = args.object as Page
}
onUnloaded(args: EventData) {
const page = args.object as Page
}
onLayoutChanged(args: EventData) {
const page = args.object as Page
}
onNavigatedTo(args: NavigatedData) {
const page = args.object as Page
console.log(args.isBackNavigation)
}
onNavigatingFrom(args: NavigatedData) {
const page = args.object as Page
console.log(args.isBackNavigation)
}
onNavigatedFrom(args: NavigatedData) {
const page = args.object as Page
console.log(args.isBackNavigation)
}
属性
actionBar
actionBar: ActionBar
获取或设置此页面的 ActionBar。
请参阅 ActionBar。
actionBarHidden
actionBarHidden: boolean
允许隐藏 ActionBar。
默认为 false
。
frame
frame: Frame
包含页面的 Frame 实例。
请参阅 Frame。
navigationContext
navigationContext: any
用于在导航期间传递数据的上下文。
backgroundSpanUnderStatusBar
backgroundSpanUnderStatusBar: boolean
获取或设置页面背景是否延伸到状态栏下方。
默认为 false
。
androidStatusBarBackground
androidStatusBarBackground: Color
获取或设置 Android 设备上状态栏的颜色。**仅限 Android**。
请参阅 Color。
enableSwipeBackNavigation
enableSwipeBackNavigation: boolean
获取或设置 iOS 上是否可以向后滑动页面。**仅限 iOS**。
默认为 true
。
statusBarStyle
statusBarStyle: 'light' | 'dark'
获取或设置状态栏的样式。
...继承的
有关其他继承的属性,请参阅 API 参考。
事件
loaded
on('loaded', (args: EventData) => {
const page = args.object as Page
console.log('Page loaded')
})
页面加载后发出。
navigatingTo
on('navigatingTo', (args: NavigatedData) => {
const page = args.object as Page
console.log('Page is being navigated to:', args.isBackNavigation)
})
在应用程序导航到当前页面之前发出。
navigatedTo
on('navigatedTo', (args: NavigatedData) => {
const page = args.object as Page
console.log('Page has been navigated to:', args.isBackNavigation)
})
在应用程序导航到当前页面后发出。
navigatingFrom
on('navigatingFrom', (args: NavigatedData) => {
const page = args.object as Page
console.log('Page is being navigated from:', args.isBackNavigation)
})
在应用程序从当前页面导航离开之前发出。
navigatedFrom
on('navigatedFrom', (args: NavigatedData) => {
const page = args.object as Page
console.log('Page has been navigated from:', args.isBackNavigation)
})
在应用程序从当前页面导航离开后发出。
原生组件
- Android:
org.nativescript.widgets.GridLayout
- iOS:
UIViewController