NativeScript:显示 ActivityIndi​​cator 时禁用所有控件

2023-12-13

假设有一个带有用户名\密码文本字段和登录按钮的登录页面。按下按钮时,将向服务器设置请求并显示 ActivityIndi​​cator。 目前,我将 StackLayout 放在所有其他控件之上,以免用户在处理请求时单击它们。但在某些情况下,TextField 保持焦点,用户可以在其中键入内容。

我已经在使用一个组件来包装所有 TextFields 以显示验证错误:

@Component({
  selector: "field",
  template: "<grid-layout><ng-content></ng-content>...</grid-layout>"
})
export class FieldComponent {
  @ContentChild(NgModel) private input: NgModel;
  ...
}

我的问题是我可以在里面的 TextField 上将 isEnabled 属性设置为 falseng-content from FieldComponent having NgModel或者以其他方式? 如果不可能,在这种情况下,当应用程序繁忙时禁用输入的最佳实践是什么?


这是我的 NativeScript+Angular 解决方案:

  1. setControlInteractionState() 是递归的。
  2. TextField 光标被隐藏(使用本机 android API)。

XML:

<GridLayout #mainGrid rows="*" columns="*">  
  <!-- Main page content here... -->
  <GridLayout *ngIf="isBusy" rows="*" columns="*">
     <GridLayout rows="*" columns="*" style="background-color: black; opacity: 0.35">
     </GridLayout>
     <ActivityIndicator width="60" height="60" busy="true">
     </ActivityIndicator>
  </GridLayout>
</GridLayout>

or

<GridLayout #mainGrid rows="*" columns="*">  
  <!-- Main page content here... -->      
</GridLayout>
<GridLayout *ngIf="isBusy" rows="*" columns="*">
   <GridLayout rows="*" columns="*" style="background-color: black; opacity: 0.35">
   </GridLayout>
   <ActivityIndicator width="60" height="60" busy="true">
   </ActivityIndicator>
</GridLayout>

打字稿:

import { Component, ViewChild, ElementRef } from "@angular/core";
import { View } from "ui/core/view";
import { LayoutBase } from "ui/layouts/layout-base";
import { isAndroid, isIOS } from "platform";

@Component({
    templateUrl: "./SignIn.html"
})
export class SignInComponent {

    @ViewChild("mainGrid")
    MainGrid: ElementRef;

    isBusy: boolean = false;

    submit() : void {
        try {
            this.isBusy = true;
            setControlInteractionState(<View>this.MainGrid.nativeElement, false);
            //sign-in here...
        }
        finally {
            this.isBusy = false;
            setControlInteractionState(<View>this.MainGrid.nativeElement, true);
        }
    }

    setControlInteractionState(view: View, isEnabled: boolean) : void {
        view.isUserInteractionEnabled = isEnabled;
        if (isAndroid) {
            if (view.android instanceof android.widget.EditText) {
                let control = <android.widget.EditText>view.android;
                control.setCursorVisible(isEnabled);
            }
        }
        if (view instanceof LayoutBase) {
            let layoutBase = <LayoutBase>view;
            for (let i = 0, length = layoutBase.getChildrenCount(); i < length; i++) {
                let child = layoutBase.getChildAt(i);
                setControlInteractionState(child, isEnabled);
            }
        }
    }

}

NS 2.5.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NativeScript:显示 ActivityIndi​​cator 时禁用所有控件 的相关文章

随机推荐

  • 删除源文件后,FileInputStream 仍然可以读取

    我在android中遇到了一个很奇怪的问题 在我的应用程序中 我将从缓存目录上传文件 如果用户在我的应用程序上传文件时使用诸如 cleanmaster 之类的清洁应用程序来清除我的应用程序的缓存目录 则所有文件都会被删除 但上传任务根本不会
  • 如何检测 Perl 中的空行?

    在 Perl 中如何检查一行 值 是否为空行 或其他 检查它而不是使用 的好方法 我想这样编码 if eq 检查当前行是否为空行 没有任何字符 x 0 我用下面的问题解决方案更新了一些代码 My test txt用于解析 constant
  • 从 SQL Server 表生成 INSERT 语句

    我有一个包含 330 万条记录的表 并且不想将整个内容从开发复制到生产 在客户端控制的计算机上并且无法使链接服务器正常工作 我只想复制其中 300 条左右的记录 如何生成 300 条插入语句 我想要插入的选择 SQL 是 select fr
  • 如何在 Windows 7 中查找已安装应用程序的 UpgradeCode 和 ProductCode

    我的机器上安装了一个应用程序 我也有它的源代码 但不知何故该应用程序的 ProductCode 和 UpgradeCode 被更改了 现在我想获取此已安装应用程序的 UpgradeCode 和 ProductCode 我觉得必须有一些工具可
  • 如何利用混淆矩阵的值绘制ROC曲线?

    考虑我有一个像这样的分类器A其分类结果如下表 TP TN FP FN A 225 100 175 100 TP 为真阳性 TN 为真阴性 FP 为误报 FN 为假阴性 如何绘制ROC曲线 我知道 我可以定义一个变量 并尝试根据 A 来预测它
  • 嵌套gridview获取父行

    我正在使用嵌套 GridViews 其中的每一行gridview有子gridView 我在用行数据绑定事件父网格视图 到绑定子网格视图 我的问题是 如何获取子 gridView 上父 GridView 的密钥行数据绑定 Event 下面是示
  • document.getElementById insideHTML 不显示

    这应该是一件很容易做的事情 但它不会返回任何东西 函数 love 应该启动 得到一个简单的数字提示 并吐出使用该起始数字的一些项目的列表 警报框正确显示了我所期望的内容 但我希望它显示在屏幕上 这只是我所追求的一小部分 但它是它的核心 IE
  • 滚动后的 div(不是位置:固定)

    我前段时间找到过 现在找不到了 我想找到像苹果商店里的购物车这样的东西 它是一个既不绝对也不固定的div 例如 假设它位于屏幕的中心 只有当你向下滚动时 它才会跟随滚动而不是消失 当它到达浏览器标题的边框时 我不确定我是否清楚 我已经搜索过
  • NHibernate 上值对象的单独表

    我是 DDD 和 NHibernate 的新手 在我当前的项目中 我有一个实体 Person 它包含一个值对象 比如说 Address 今天 这很好 但也许有一天我会要求我的值对象 在本例中为地址 必须成为一个实体 在尝试以 DDD 方式对
  • TCP 异步套接字抛出 10057

    我编写了以下代码 public static void BeginListen int port IPAddress address IPAddress Any IPEndPoint endPoint new IPEndPoint addr
  • 如何在 WMIC 中转义逗号(如字符串)

    我希望能够运行如下查询 wmic path Win32 Service where DisplayName like FooBarService X Y get 但是 由于类似字符串中的逗号 它不起作用 我收到的错误是 动词无效 我尝试用反
  • 如何显示保留两位小数的浮点数? [复制]

    这个问题在这里已经有答案了 我有一个采用浮点参数 通常是整数或具有一位有效数字的小数 的函数 并且我需要输出具有两位小数的字符串中的值 5 5 00 5 5 5 50 等 我怎样才能在Python中做到这一点 由于这篇文章可能会发布一段时间
  • 将列添加到 Crystal Report 的数据集 (xsd)

    我正在编写一份报告 需要将一列添加到我的一个数据集和 RPT 文件中 但是当我尝试修改数据集时 收到错误消息 指出指定的表不存在 当我查看代码时 看起来最初有一个表用于此目的 但这种方法已被放弃 现在是通过附加到报告的代码中的数据集来完成的
  • 将文件名分配给 shell 中的变量

    我正在尝试编写一个脚本 它的功能比我要向您展示的功能更复杂一些 但我知道问题出在这部分 我希望通过以下方式将目录中文件列表的每个名称分配给一个变量 同一变量 一次一个 for循环 然后用这个在循环内部做一些事情 看看是什么意思 for th
  • 如何将私钥证书 (.pfx)、公钥证书 (.cer) 上传到 Azure WebApp

    如何使用 Azure Powershell 将私有公共证书上传到 Azure 应用服务 我知道 New AzureRmWebApp SSLBindings 但我没有进行任何 SSL 绑定 我们有使用 SSL 绑定的 Azure 应用服务 为
  • Laravel:如何使用 Eloquent 获取关系列的 SUM

    如何使用预先加载来获取相关模型的 SUM 而不加载整个关系数据 在我的项目中有两个模型 Account and Transaction 账户模型has many交易 我的要求是 获取帐户并仅加载相关表上的总和 提供了我当前的代码 在这段代码
  • 如何使用 scapy 读取保存的 pcap 文件中的 TCP 协议数据?

    我正在尝试使用 scapy 读取 Pcap 文件 from scapy all import logfile rdpcap Pcap 112400 pcap print logfile output pcap TCP 0 UDP 0 ICM
  • 如何为整个winform应用程序设置文化

    我想为整个 winform 应用程序设置一种文化 我怎样才能做到这一点 我改变了我的Program cs像这样的文件 using System using System Collections Generic using System Gl
  • 如何在 Maven 中按类别运行 JUnit 测试?

    使用 JUnit 4 8 和新的 Category注释 有没有办法选择类别的子集来与 Maven 的 Surefire 插件一起运行 例如我有 Test public void a Category SlowTests class Test
  • NativeScript:显示 ActivityIndi​​cator 时禁用所有控件

    假设有一个带有用户名 密码文本字段和登录按钮的登录页面 按下按钮时 将向服务器设置请求并显示 ActivityIndi cator 目前 我将 StackLayout 放在所有其他控件之上 以免用户在处理请求时单击它们 但在某些情况下 Te