“条条大路通罗马,挖钱的方法也多种多样。”
- Seba Smith - 《掘金者》,1840年。
“给巴哥犬穿衣服的方式多种多样,设计应用导航的方式也多种多样。”
- Sebastian Witalec - NativeScript 博客,2017年。
为您的应用选择合适的导航模型非常重要。根据屏幕数量及其关系,您可以选择标签导航或抽屉导航,甚至两者结合使用。但是,选择您想要做什么只是硬币的一面。
硬币的另一面是实际的实现。问题在于,有很多不同的方法可以
在查看我们多年来使用 NativeScript 创建的一些项目后,我们意识到每个开发人员都有自己关于如何“给他们的巴哥犬穿衣服”的想法。
这就是我们组建“启动套件”团队的原因。他们的任务是为 NativeScript 项目提出模板。他们花费了一些时间研究各种选项并分析常见场景,权衡不同技术的利弊。因此,他们创建了一组 NativeScript 项目模板。每个项目都遵循一致的结构,每个项目都遵循行业最佳实践(如 Angular 样式指南),并且每个项目都是开始全新 NativeScript 项目的绝佳起点。
您需要做的只是运行
tns create app-name --template tns-template-name-here
请注意,本文基于
NativeScript 3.1
的模板,这些模板可能会随着时间的推移而发展,某些内容可能会发生变化。您无法阻止进步 :)
模板分为 3 类
它们各有 3 种变体
-ts
-ng
即使每个模板都非常不同,它们仍然有一些共同点。
在项目的根目录下,我们有
_app-variables.scss
- 包含每个组件样式导入的全局 SASS 变量。app.scss
- 全局通用样式表。这些样式规则适用于 Android 和 iOS。platform.android.scss
- 全局 Android 样式表。这些样式规则仅适用于 Android。platform.ios.scss
- 全局 iOS 样式表。这些样式规则仅适用于 iOS。_app-variables.scss
样式表对于每个模板都完全相同。在这里,您可以定义应用程序的品牌颜色。如果您需要使用不同的模板但相同的品牌颜色构建多个应用程序,则只需在所有项目中同步 _app-variables.scss
即可。
大多数 UI 元素使用 $accent-dark
和 $accent-light
变量,因此这可能是您更新应用程序配色方案的首选步骤。
为了添加美观的基于字体的图标,每个模板都已配置了 FontAwesome。
您需要做的就是在组件样式中添加一个 fa
类,然后提供所需图标的 Unicode 值。例如,以下标签将显示如下
<Label class="fa h1" text="I like  more than "></Label>
如您可能猜到的,
是浴缸,
是淋浴。
这是最简单的模板之一,其中每个页面都显示在其自己的标签视图中。开箱即用,我们有 5 个标签:home
、browse
、search
、featured
和 settings
。每个标签都相当空,但模板对您开放,您可以将其更改为令人惊叹的内容。
要使用 {N} Core JavaScript 模板,请运行
tns create app-name --template tns-template-tab-navigation
要使用 {N} Core TypeScript 模板,请运行
tns create app-name --template tns-template-tab-navigation-ts
要使用 Angular 模板,请运行
tns create app-name --template tns-template-tab-navigation-ng
此模板的所有魔力都包含在 tabs
文件夹中,该文件夹包含标签页面组件和每个标签视图的文件夹。
可用标签的列表位于标签视图文件中,根据项目类型,它可以是 tabs-page.xml
或 tabs.component.html
(Angular)。基本上,标签页面包含一个 TabView
组件,该组件为我们要显示的每个页面都提供了一个标签项。
要向任何现有标签视图添加内容,只需转到其文件夹并在那里进行所有更改。
要添加新标签,您需要在 tabs
文件夹中创建一个新组件(就像其他组件一样),然后将标签项添加到 TabView
中。
如果您使用的是 NativeScript Core,那么可能有一件事您尚未意识到,这对于理解 tabs-page.xml
中发生的事情很重要。这就是我们如何引入外部 UI 组件。例如,让我们看一下 Browse 组件。我们知道它位于 /tab/browse
文件夹中,包含组件的文件称为 BrowseView
。因此,要将其添加到 tabs-view
中,我们需要
xmlns:namespace="folderurl"
格式向 <Page>
添加引用xmlns:browse="/tabs/browse"
<namespace:filename />
格式添加组件<browse:BrowseView />
抽屉模板使用侧边抽屉进行导航。您可以通过按下汉堡图标(左上角)或从屏幕左侧边缘向右拖动来调出侧边抽屉。
就像标签模板一样,我们可以导航到 5 个页面:home
、browse
、search
、featured
和 settings
。
要使用 {N} Core JavaScript 模板,请运行
tns create app-name --template tns-template-drawer-navigation
要使用 {N} Core TypeScript 模板,请运行
tns create app-name --template tns-template-drawer-navigation-ts
要使用 Angular 模板,请运行
tns create app-name --template tns-template-drawer-navigation-ng
要向导航添加新页面,只需转到 shared/my-drawer/MyDrawer-view-model
。视图模型包含一个 导航项
数组,每个数组由以下字段组成
以下是一个示例
{
title: "Featured",
name: "featured",
route: "featured/featured-page",
icon: "\uf005",
isSelected: selectedPage === "Featured"
},
要向导航添加新页面,只需转到 shared/my-drawer/my-drawer.component
。组件包含一个 导航项
数组,每个数组由以下字段组成
app.scss
添加一个与您要使用的样式匹配的 CSS 类即可app-routing.module.ts
中定义的导航路径以下是一个示例
{
title: "Featured",
name: "featured",
route: "/featured",
icon: "\uf005"
},
默认情况下,侧边栏中的所有项目的外观都相同,但模板提供了一种简洁的机制来为每个项目设置样式。
一切从您在 ItemTemplate
中提供的 name
属性开始
{
title: "ABC",
name: "abc",
...
}
我们可以获取 abc
并向我们的 CSS 添加其他类,这些类仅适用于 abc
sidedrawer-list-item-abc
,sidedrawer-list-item-abc selected
要使用它,您只需将其他样式添加到抽屉的 CSS 文件(_MyDrawer.scss
(Core)或 _my-drawer.component.scss
(Angular))中的 .sidedrawer-list-item
类即可。
.sidedrawer-list-item {
// current css
...
.sidedrawer-list-item-abc {
background-color: black;
Label {
color: yellow;
}
&.selected {
background-color: gray;
Label {
color: red;
}
}
}
}
最后一个模板专注于主从导航。其中主页面从 Firebase 或 Kinvey 加载汽车列表。当您点击任何项目时,应用会导航到 car-detail 页面。
此模板可在脱机状态下工作。这通常是严肃应用的“必备”要求。
要使用 {N} Core JavaScript 模板,请运行
tns create app-name --template tns-template-master-detail
要使用 {N} Core TypeScript 模板,请运行
tns create app-name --template tns-template-master-detail-ts
要使用 Angular 模板,请运行
tns create app-name --template tns-template-master-detail-ng
有 3 个主要组件值得一看
car-list
在 cars
文件夹中 - 用于在列表视图中显示所有汽车car-detail
在 cars/car-detail
文件夹中 - 用于显示所选汽车的详细视图car-detail-edit
在 cars/car-detail-edit
文件夹中 - 用于编辑所选汽车此外,还有 2 个辅助组件用于编辑汽车详细信息
list-selector
- 一种智能下拉式 UI 组件,它显示当前选定的值,当您点击它时,它会打开一个模态窗口,让您选择另一个选项,image-add-remove
- 此组件允许您从图片库中选择不同的图片最后,我们还有 car-service
(在 cars/shared
文件夹中),它是负责从后端加载数据和发送更新的服务。
template-master-detail-kinvey-ng
请注意,这仍然是一个正在进行的工作,我们希望听到您与我们分享的任何反馈。最好的做法是在相关项目下创建一个 Github 问题。我们已经收到了一些问题,这帮助我们使模板变得更好。
这些模板是帮助您构建世界一流应用程序的非常简单的方法。无论您是经验丰富的 {N} 开发人员还是新手,这些模板都提供了许多智能解决方案和最佳实践。此外,您还可以获得一个经过精心设计的应用程序,该应用程序在 Android 和 iOS 之间具有统一的外观和感觉。
所以……
试试它们,构建世界一流的应用程序。