- 版本:6.0.2
- GitHub: https://github.com/PeterStaev/NativeScript-Drop-Down
- NPM: https://npmjs.net.cn/package/nativescript-drop-down
- 下载量
- 昨天:37
- 上周:303
- 上个月:1449
贡献 - 欢迎帮助
此插件由 NativeScript 社区支持。所有 Pull Request 都受欢迎,但在创建新的 Pull Request 之前,请确保演示应用程序正常工作。如果您没有遇到任何问题但想为此插件做出贡献,您可以在这里找到正在进行中的问题列表。
创建 Pull Request 清单
- 复制仓库
- 添加新功能或修复问题,并将其推送到您的复制仓库
- 启动 demo 和 demo-ng 应用程序,并确保它们正常工作(确保在 iOS 和 Android 上都没有抛出控制台错误)
- 从您的复制仓库创建一个指向此存储库 'master' 分支的 Pull Request
感谢您的贡献。
NativeScript DropDown 小部件
一个 NativeScript DropDown 小部件。DropDown 显示用户可以从中选择一个项的列表。对于 iOS,它将一个 UILabel 包装起来,将 inputView
设置为一个 UIPickerView,该视图显示项。对于 Android,它包装了 Spinner 小部件。
屏幕截图
安装
从您的项目的根目录运行以下命令
tns plugin add nativescript-drop-down
此命令会自动安装必要的文件,并将 nativescript-drop-down 存储为项目 package.json 文件中的依赖项。
配置
无需额外配置!
API
事件
-
opened
当 DropDown 打开时触发。 -
closed
当 DropDown 关闭时触发。 -
selectedIndexChanged
当用户更改 DropDown 中的选择时触发
静态属性
-
openedEvent - String
用于挂钩 opened 事件的字符串值。 -
closedEvent - String
用于挂钩 closed 事件的字符串值。 -
selectedIndexChangedEvent - String
用于挂钩 selectedIndexChanged 事件的字符串值。
实例属性
-
ios - UILabel
获取表示此组件用户界面的原生 iOS 视图。仅在运行 iOS 时有效。 -
android - android.widget.Spinner
获取表示此组件用户界面的原生 android 小部件。仅在运行 Android 操作系统时有效。 -
items - Array | ItemsSource
获取或设置 DropDown 的项集合。项属性可以设置为数组或定义长度和 getItem(index) 方法的对象。 -
selectedIndex - Number
获取或设置 DropDown 的选中索引。 -
hint - String
获取或设置 DropDown 的提示。 -
isEnabled - boolean
获取或设置下拉列表是否启用。如果您想应用特定的样式,可以使用:disabled
伪CSS选择器。 -
accessoryViewVisible - 布尔值(默认:true)
获取/设置在iOS下是否会有一个附加视图(带完成按钮的工具栏)。仅在iOS上有效。 -
itemsTextAlignment - 字符串 获取或设置DropDown中项的对齐方式。
-
itemsPadding - 字符串 获取或设置DropDown中项的内边距。
方法
-
open(): void
打开下拉列表。 -
close(): void
关闭下拉列表。
用法
您需要在您的页面标签中添加xmlns:dd="nativescript-drop-down"
,然后只需在页面中使用<dd:DropDown/>
即可将小部件添加到页面中。
<!-- test-page.xml -->
<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded" xmlns:dd="nativescript-drop-down">
<GridLayout rows="auto, auto, *" columns="auto, *">
<dd:DropDown items="{{ items }}" selectedIndex="{{ selectedIndex }}"
opened="dropDownOpened" closed="dropDownClosed"
selectedIndexChanged="dropDownSelectedIndexChanged"
row="0" colSpan="2" />
<Label text="Selected Index:" row="1" col="0" fontSize="18" verticalAlignment="bottom"/>
<TextField text="{{ selectedIndex }}" row="1" col="1" />
</GridLayout>
</Page>
// test-page.ts
import observable = require("data/observable");
import observableArray = require("data/observable-array");
import pages = require("ui/page");
import { SelectedIndexChangedEventData } from "nativescript-drop-down";
var viewModel: observable.Observable;
export function pageLoaded(args: observable.EventData) {
var page = <pages.Page>args.object;
var items = new observableArray.ObservableArray();
viewModel = new observable.Observable();
for (var loop = 0; loop < 20; loop++) {
items.push("Item " + loop.toString());
}
viewModel.set("items", items);
viewModel.set("selectedIndex", 15);
page.bindingContext = viewModel;
}
export function dropDownOpened(args: EventData) {
console.log("Drop Down opened");
}
export function dropDownClosed(args: EventData) {
console.log("Drop Down closed");
}
export function dropDownSelectedIndexChanged(args: SelectedIndexChangedEventData) {
console.log(`Drop Down selected index changed from ${args.oldIndex} to ${args.newIndex}`);
}
在Angular中的用法
迁移到3.0+
- 删除
registerElement("DropDown", () => require("nativescript-drop-down/drop-down").DropDown);`
- 在
NgModule
中导入DropDownModule
import { DropDownModule } from "nativescript-drop-down/angular";
//......
@NgModule({
//......
imports: [
//......
DropDownModule,
//......
],
//......
})
示例用法
// main.ts
import { NgModule } from "@angular/core";
import { NativeScriptModule } from "nativescript-angular/nativescript.module";
import { platformNativeScriptDynamic } from "nativescript-angular/platform";
import { DropDownModule } from "nativescript-drop-down/angular";
import { AppComponent } from "./app.component";
@NgModule({
declarations: [ AppComponent ],
bootstrap: [ AppComponent ],
imports: [
NativeScriptModule,
DropDownModule,
],
})
class AppComponentModule {
}
platformNativeScriptDynamic().bootstrapModule(AppComponentModule);
<!-- app.component.html -->
<StackLayout>
<GridLayout rows="auto, auto, *"
columns="auto, *">
<DropDown #dd
backroundColor="red"
itemsTextAlignment="center"
[items]="items"
[(ngModel)]="selectedIndex"
(selectedIndexChanged)="onchange($event)"
(opened)="onopen()"
(closed)="onclose()"
row="0"
colSpan="2"></DropDown>
<Label text="Selected Index:"
row="1"
col="0"
fontSize="18"
verticalAlignment="bottom"></Label>
<TextField [text]="selectedIndex"
row="1"
col="1"></TextField>
</GridLayout>
</StackLayout>
// app.component.ts
import { Component } from "@angular/core";
import { SelectedIndexChangedEventData } from "nativescript-drop-down";
@Component({
selector: "my-app",
templateUrl:"app.component.html",
})
export class AppComponent {
public selectedIndex = 1;
public items: Array<string>;
constructor() {
this.items = [];
for (var i = 0; i < 5; i++) {
this.items.push("data item " + i);
}
}
public onchange(args: SelectedIndexChangedEventData) {
console.log(`Drop Down selected index changed from ${args.oldIndex} to ${args.newIndex}`);
}
public onopen() {
console.log("Drop Down opened.");
}
public onclose() {
console.log("Drop Down closed.");
}
}
在Angular中设置selectedIndex值
获取子下拉列表组件的实例如下
@ViewChild('dd') dropDown: ElementRef;
// set the index programatically from the parent component
this.dropDown.nativeElement.selectedIndex = <some number from code>
处理值和显示成员
通常情况下,您希望在下拉列表中显示一个项目,然后获取与文本相关联的后端值。例如,带有状态的下拉列表中,您可能想显示完整的状态名称(例如佛罗里达),然后在后端操作时使用状态代码(例如FL)。DropDown的项属性可以设置为对象数组或实现getItem(index: number): any
函数和length
属性的定制对象。在插件3.0版本中,它内置了一个类,可以帮助您处理这种情况。
import { ValueList } from "nativescript-drop-down";
然后您可以设置DropDown的items
属性为ValueList的实例
let dd = page.getViewById<DropDown>("dd");
let itemSource = new ValueList<string>([
{ value: "FL", display: "Florida" },
{ value: "MI", display: "Michigan" }
]);
dd.items = itemSource;
这使您可以执行如下操作
1.如果您想根据后端值(例如FL)在下拉列表中选择一个项,您可以这样做
dd.selectedIndex = itemSource.getIndex("FL");
2.您可以使用以下方式获取用户选择的项的后端值
let selectedValue = itemSource.getValue(dd.selectedIndex);
演示
此存储库包含Angular和纯NativeScript演示。要运行这些演示,请在您的shell中执行以下操作
$ git clone https://github.com/peterstaev/nativescript-drop-down
$ cd nativescript-drop-down
$ npm install
$ npm run demo-ios
这将运行纯NativeScript演示项目在iOS上。如果您想在Android上运行它,只需使用-android
而不是-ios
后缀。
如果您想运行Angular演示,只需使用demo-ng-
前缀而不是demo-
。
捐赠
bitcoin:14fjysmpwLvSsAskvLASw6ek5XfhTzskHC