NativeScript Vue - 将焦点放在 TextField 上

Posted

技术标签:

【中文标题】NativeScript Vue - 将焦点放在 TextField 上【英文标题】:NativeScript Vue - set focus on TextField 【发布时间】:2020-07-04 12:11:31 【问题描述】:

我在 ios 13 上使用 NativeScript ("nativescript-vue": "^2.5.0") 测试

"tns-android": 
      "version": "6.0.0"
    ,
    "tns-ios": 
      "version": "6.0.1"
    

点击按钮时尝试将焦点设置在 TextField 上,目前看起来像这样

  <GridLayout dock="top" columns="auto,*,auto"  rows="auto,auto">
    <Label text.decode="&#xf2bd;" horizontalAlignment="left" row="0" rowSpan="2"  col="0" />
    <Label text="USER" horizontalAlignment="left" row="0" col="1" class="m-l-3" />
    <Label :text="userEditBtnText"  @tap="userEditTap()"  horizontalAlignment="right" row="0" rowSpan="2" col="2" class="btnEdit"/>
    <TextField ref="userid" text="@username" :editable="userEdit" horizontalAlignment="left" row="1" col="1" class="m-l-3"/>
  </GridLayout>           

以及@tap="userEditTap()" 的代码

userEditTap()
  this.userEdit = true;
  this.userEditBtnText="SAVE";
  this.$refs["userid"].focus();      

我的控制台错误:

javascript 错误:文件: node_modules/@nativescript/core/application/application.ios.js:312:26 JS ERROR 错误:NativeScript 遇到致命错误:TypeError: this.$refs["userid"].focus 不是函数。 (在 'this.$refs["userid"].focus()', 'this.$refs["userid"].focus' 是 未定义)

感谢任何意见!

【问题讨论】:

【参考方案1】:

当您通过 ref 访问时,您正在访问 Vue 元素,您必须调用 .nativeView 才能访问实际的 TextField。

应该是,

this.$refs["userid"].nativeView.focus();      

【讨论】:

谢谢,在标签上点击两次才能获得焦点,但我现在可以忍受这个!关于可能导致这种行为的任何见解?我试过this.$refs["userid"].nativeView.focus(); this.$forceUpdate();,但似乎没有效果。 我不确定,如果您可以共享 Playground 示例,那么调试起来很容易。 当然,检查一下play.nativescript.org/?template=play-vue&id=Pnlbwc 如果您在该字段变为可编辑但未聚焦时点击编辑,当您再次点击它时,它应该聚焦 您粘贴了链接吗?还要确认您在哪个平台和设备上运行测试。 这是因为您将 userEdit 标志绑定到 TextField 的 editable 属性,该属性最初设置为 false。在您第一次单击时,您切换标志,但更改检测周期在此之后运行,并且需要一段时间才能编辑文本字段。因此,焦点第一次不起作用。等待可编辑属性更改(使用属性更改侦听器)或更新可从 JS 编辑的文本字段,而不是模型绑定,这样更改将立即生效并立即响应焦点。

以上是关于NativeScript Vue - 将焦点放在 TextField 上的主要内容,如果未能解决你的问题,请参考以下文章

如何停止将焦点移到 Nativescript (Android) 中的 Enter 按键上?

无法将空子视图添加到视图组 Nativescript-Vue

Nativescript Vue:Android 上的 SearchBar 聚焦,页面加载时键盘可见

Vue 通过 refs 将焦点放在输入上

Nativescript Vue 导航问题

如何将 Apollo 与 NativeScript vue 集成?