Jea*_*los 4 javascript android typescript nativescript nativescript-angular
我试图避免NativeScript应用程序中的意外行为.
当我走进任何具有搜索字段(SearchBar)的屏幕时,系统会自动将焦点放在搜索字段上.
然后我得到了一位朋友的帮助,他给了我一个解决这个问题的功能.但我现在面临的问题是我无法获得界面元素.我有以下代码:
import {Component} from "@angular/core";
import {Page} from "ui/page";
import frame = require("ui/frame");
@Component({
selector: "clientes",
templateUrl: "pages/clientes/clientes.html",
styleUrls: ["pages/clientes/clientes.common.css",
"pages/clientes/clientes.css"]
})
export class ClientesPage {
page;
constructor(private _router: Router) {
this.page = <Page>frame.topmost().currentPage;
this.removeSearchFocus();
}
removeSearchFocus() {
var parent = this.page.getViewById('box-lista');
var searchBar = this.page.getViewById('barra-busca');
console.log(JSON.stringify(parent)); // UNDEFINED
console.log(JSON.stringify(searchBar)); // UNDEFINED
if (parent.android) {
parent.android.setFocusableInTouchMode(true);
parent.android.setFocusable(true);
searchBar.android.clearFocus();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有了模板:
<Page.actionBar>
<ActionBar title="Clientes"></ActionBar>
</Page.actionBar>
<StackLayout orientation="vertical" id="box-lista">
<SearchBar hint="Buscar" cssClass="mh mv" id="barra-busca"></SearchBar>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
我的目标是获得搜索字段的自动焦点,但我无法获得界面元素.
扩展Nikolay上面的答案,使用@ViewChild#foo添加到你的堆栈布局,看起来像:
<StackLayout #foo ....
然后:
@ViewChild('foo') stackLayout: ElementRef;
ngAfterViewInit() {
let yourStackLayoutInstance = this.stackLayout.nativeElement;
}
Run Code Online (Sandbox Code Playgroud)
它不会通过ID获取元素,但这是与元素交互的更多ng2方式,并使您的代码更加松散地耦合到DOM.
要在项目中获取元素,您应该使用 @ViewChild装饰器,它将帮助您创建指向SearchBar. 关于这一点,您可以在这里查看我的项目,也可以查看这篇文章:使用 NativeScript 和 Angular 2 构建应用程序
| 归档时间: |
|
| 查看次数: |
6628 次 |
| 最近记录: |