升级到 Angular 9 后指令无法与 FormControl 一起使用

2023-12-03

我已经使用指令来启用和禁用表单。这是在一个单独的打字稿文件中。代码如下:-

import { NgControl } from '@angular/forms';
import { Directive, Input } from '@angular/core';

@Directive({
    selector: '[disableControl]'
})
export class DisableControlDirective {
    @Input('disableControl') set disableControl( condition : boolean ) {
        const action = condition ? 'disable' : 'enable';
        this.ngControl.control[action]();
    }
    constructor (private ngControl : NgControl){}
}

HTML: -

<div class="card" *ngIf="commentsFormEnable">
    <div class="card">
      <h3 class="mb-0">
        <button class="btn  btn-primary btn-sm" aria-expanded="false">
          Comments
        </button>
      </h3>
      <form [formGroup]="commentsForm" data-target="comments" id="commentsForm" (ngSubmit)="onSubmit($event)">
        <div class="row">
          <div class="col">
            <div class="input-group mb-3">
              <div class="input-group-prepend">
                <span class="input-group-text">Comments</span>
              </div>
              <textarea formControlName="comment" class="form-control" [disableControl]="comments" placeholder="Add a comment."></textarea>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col text-right">
            <ng-container *ngIf="comments; else commentsbtnElseBlock">
              <ng-container *ngTemplateOutlet="params;context:{btnId: 'comments', toggleValue: comments}"></ng-container>
            </ng-container>
            <ng-template #commentsbtnElseBlock>
              <ng-container *ngTemplateOutlet="paramsElse;context:{btnId: 'comments', toggleValue: comments}"></ng-container>
            </ng-template>
          </div>
        </div>
        <div class="row">
            <div class="col">
                <div *ngFor="let commentData of commentsList; let i=index">
                  <div class="comment-list">
                    <div class="user-initial border rounded-circle">
                      {{commentData.UpdatedBy | slice:0:1}}
                    </div>
                    <div class="comment-info">
                      <ul>
                        <li class="ml-2 mr-2">
                          <span class="user-name">{{commentData.UpdatedBy}}</span>
                        </li>
                        <li>
                          <span>
                            <small>commented {{commentData.UpdatedDate | date:'medium'}}</small>
                          </span>
                       <!--   <i input type="checkbox" class="fas fa-trash-alt" id="{{commentData.RecordId}}" (change)=onChange($event) (click)="deleteCommentsEntity(i,project.ProjectId)"></i>-->
                        </li>
                      </ul>
                    </div>
                    <div class="ml-5 mb-5">
                      {{commentData.Comment}}
                      <!--<div class="project-desc" style="text-align:left; width:3080px">
                        <app-inline-edit [(ngModel)]=commentData.Comment label=commentData.Comment [required]="true" type="input" style="width:300px">
                        </app-inline-edit>
                      </div>-->
                      <button class="btn btn-pill btn-primary btn-sm mr-2" style="text-align:right;color:Tomato;margin-right:20px;float:right" type="button">
                        <i ng-mouseover="count = count + 1" ng-init="count=0" ng-show="Delete" id="{{commentData.RecordId}}" class="fas fa-trash-alt" style="text-align:right;" (click)="deleteCommentsEntity(commentData.RecordId,project.ProjectId)"></i>
                      </button>
                    </div>
                   </div>
                </div>
              </div>
        </div>
      </form>
    </div>
</div>

我在这里担心的是上面的代码适用于以下包:-

"@angular/animations": "^8.0.2",
"@angular/common": "^8.0.2",
"@angular/compiler": "^8.0.2",
"@angular/core": "^8.0.2",
"@angular/forms": "^8.0.2",
"@angular/http": "^8.0.0-beta.10",
"@angular/platform-browser": "^8.0.2",
"@angular/platform-browser-dynamic": "^8.0.2",
"@angular/platform-server": "^8.2.11",
"@angular/router": "^8.0.2",

并且不与以下人员一起工作:-

"@angular/animations": "^9.0.0-rc.12",
"@angular/common": "^9.0.0-rc.12",
"@angular/compiler": "^9.0.0-rc.12",
"@angular/core": "^9.0.0-rc.12",
"@angular/forms": "^9.0.0-rc.12",
"@angular/platform-browser": "^9.0.0-rc.12",
"@angular/platform-browser-dynamic": "^9.0.0-rc.12",
"@angular/platform-server": "^8.2.11",
"@angular/router": "^9.0.0-rc.12",

我收到此错误 -

无法读取未定义的“已禁用”属性 DisableControlDirective.set 无法读取属性“禁用” 不明确的

会不会是版本升级的问题?我一无所知。请建议是否有任何方法可以解决此问题。


由于某种原因,角度 9 注入的 ngControl 无法像在角度 8 中那样工作, 作为解决方法,您可以换行this.ngControl.controlaction内部设置超时

尝试这个:

import { NgControl } from '@angular/forms';
import { Directive, Input } from '@angular/core';

@Directive({
    selector: '[disableControl]'
})
export class DisableControlDirective {
        @Input('appDisable') set disableControl( condition : boolean ) {
            const action = condition ? 'disable' : 'enable';
            setTimeout(()=>{
              this.ngControl.control[action]();
            });
       }
    constructor (private ngControl : NgControl){}
}

Or

您可以通过侦听 ngOnChanges 内的绑定更改来解决此问题,如下所示

 @Input('appDisable') disableControl;
   ngOnChanges(changes) {
    if (changes['disableControl']) {
      const action = this.opDisabled ? 'disable' : 'enable';
      this.ngControl.control[action]();
    }
  }

欲了解更多信息,请检查此

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

升级到 Angular 9 后指令无法与 FormControl 一起使用 的相关文章

  • 在 Angular 4 中处理来自 Api 的过期令牌

    我需要帮助来处理我的角度应用程序中的过期令牌 我的 api 已过期 但我的问题是当我忘记注销我的角度应用程序时 一段时间后 我仍然可以访问主页但没有数据 我能做点什么吗 有没有可以处理这个问题的库 或者有什么我可以安装的吗 更好 如果我什么
  • 将 TypeMoq 模拟与 Angular TestBed 结合使用

    我定义了一个FooService如下 import Injectable from angular core export interface Foo Foo string Injectable export class FooServic
  • Angular 2 测试 ng-content

    我想知道是否有办法测试ng content不创建宿主元素 例如 如果我有警报组件 Component selector app alert template div div
  • Angular 2 可观察间隔锁定 UI

    当我使用Observable Interval要执行 UI 的 http 刷新 如果间隔太快 它会锁定 UI 上的按钮 使其无法工作 按钮没有记录点击 似乎是一个计时问题 如果我增加时间并因此错过了 get 调用 则按钮可以工作 但数据会延
  • 如何在 Angular2 中实现间隔/轮询以与量角器一起使用?

    我有一个 angular2 应用程序 我想用量角器进行测试 在此应用程序中 我有一个带有图表的页面 该页面正在使用自动生成的数据定期更新 显然 Protractor 的一项功能是在执行测试代码之前等待脚本和 http 调用完成 但是 如果有
  • 在电子打印中构建的角度应用程序显示空白窗口

    我开发了一个角度应用程序 然后在电子中构建该应用程序 该应用程序工作正常 但是当我单击按钮打印特定 div 时 它会打开一个电子的空白窗口 我用ngx print图书馆 它在角度服务方面效果很好 但在电子构建方面遇到了问题
  • Angular 4在下一行显示p标签的换行符

    我有一个 Angular 4 页面 我必须在其中显示用户评论列表 用户可以多行输入评论 我想在多行中绑定文本 我想显示以 n在新行中 我努力了 p p p comment text p 我不想更换 n with br 标签 我想要别的东西
  • mat-table 中每行的 formGroup 数组

    我有一个 formGroup 数组 其中每个元素代表一个表单 接下来我有一个 mat 表 我想要做的是将每个 tr 即每一行 生成为不同的表单 以便表的第 i 行链接到第 i 个 formGroup 因此 在第 i 行内 每个 td 元素都
  • gyp ERR,Npm 无法获取本地颁发者证书

    我正在致力于 Windows 10 的全新安装 唯一的事情是我安装了 cygwin 以在 cmd 中获取 unix 命令 当我打字时npm install g angular cli它下载了必要的文件 但我收到错误 gyp ERR conf
  • 数字和文本列的垫排序问题

    我有角度材料数据源 角度材料版本是 5 0 3 排序正在进行中 但是对于某些列 它的排序不正确 那里有数字和文字 例如 排序结果如 XXX 1 1tesxt 1 OPD OXD 12
  • Angular 5 中使用 rxjs 进行持久订阅

    我对 Angular 5 中的 rxjs 仍然有点陌生 并且很难表达我的问题 我仍然希望得到一些提示 我经常会得到相同的设置 多个组件显示相同的数据 访问数据的单个服务 现在通过 Observables 接收数据时我有 2 个选择 a 订阅
  • Webpack 在 Angular 的 ng 服务中的作用

    我是 Angular 的新手 想知道当我们为应用程序提供服务时 Webpack 在幕后扮演什么角色 在最初的印象中 我开始知道 webpack 是一个构建和打包工具 它将所有必需的 JS 文件分组到单独的包中 然而 我无法找到 webpac
  • 如何禁用 Ionic2 / Angular2 上的“未使用的导入”警告

    我知道有一个选项可以禁用这些 未使用的导入 警告tslint跑步时ionic serve or ionic build 但我不知道该把它放在哪里 有人知道吗 谢谢 1 https palantir github io tslint rule
  • 获取“回调 URL 与 Auth0 不匹配”

    我有一个 Auth0 客户端 配置了以下回调 URL http 本地主机 4200 http localhost 4200 我可以正常登录 问题是当我导航到应用程序中的某个 URL 时 http localhost 4200 places
  • http.put 请求在 Angular2 中执行两次

    我正在尝试更新从我的 Angular2 应用程序调用 API 的公司记录 我在调试时注意到 http 调用被执行了两次 我找到了另一个堆栈溢出线程 https stackoverflow com questions 37241294 ang
  • 如何在 ngrx/effects 中执行 if/else 操作?

    我正在使用 ngrx effects 我想根据以下情况分派不同的操作foo商店里的状态 这就是我现在正在做的 Effect foo1 this updates whenAction Actions FOO filter obj gt obj
  • 如何在 TypeScript 中禁用/抑制库中的错误?

    我打开了一些编译器开关来报告代码中的更多问题 例如严格的空检查 但我在使用的库中遇到了数十个错误 例如 default xxx node modules angular core src util decorators d ts 11 5
  • 如何使用 *ngFor 迭代对象键

    我想在 Angular 2 中使用 ngFor 迭代 object object 问题是该对象不是对象的数组 而是包含更多对象的对象的对象 data id 834 first name GS last name Shahid phone 0
  • Angular - 为每个请求设置标头

    我需要在用户登录后为每个后续请求设置一些授权标头 要为特定请求设置标头 import Headers from angular2 http var headers new Headers headers append headerName
  • 415 不支持的媒体类型; Angular2 到 API

    我是 Angular 2 的新手 我面临着一个无法找到解决方案的问题 当我尝试从 Angular 2 发布到 API 时 我得到 415 不支持的媒体类型 角度2代码 onSubmit value any console log value

随机推荐

  • 为什么我们不能在同一个类中声明一个类的对象?

    class A A a why can t we do this 因为类的大小是无限的 这是通过指定不能将不完整的类型作为成员 只能将其引用或指针来以语言方式完成的 并且A在类定义结束之前是一个不完整的类型
  • ARC编译器下缺乏自动释放优化

    我只是想知道 为什么ARC编译器下没有自动释放池优化 它将在最内层作用域中保留一个对象 将其从自动释放池中删除 并在该对象不再使用时释放它 引用另一个问题中一个非常不切实际的例子 for NSUInteger i 0 i lt 10000
  • 如何从 ReactiveCommand 捕获异常?

    我知道如何处理由调用的异步任务引发的异常ReactiveCommand
  • 当应用程序在后台运行时以编程方式更改iPhone锁定屏幕

    我正在开发一个 iPhone 应用程序 当应用程序在后台运行时 我必须以编程方式更改锁屏图像 我有很多东西说这是不可能的 但有一个应用程序可以实现此目的 请让我知道如何实现这一点 Thanks 更改锁定屏幕图像的唯一方法是在播放音频时 Po
  • 如何访问和查询复制到assets文件夹中的数据库?

    我读过一些教程 其中将预先存在的数据库复制到资产文件夹 并编写代码将该数据库复制到应用程序数据库的默认系统路径 package com example c1 import java io FileOutputStream import ja
  • Python-将用户输入转换为列表

    有没有办法要求用户输入并将他们的输入转换为列表 元组或字符串 我想要将一系列数字插入到矩阵中 我可以告诉他们将所有数字输入控制台 不带空格并迭代它们 但是还有其他方法可以做到这一点吗 您可以简单地执行以下操作 user input inpu
  • 在客户端离线解析 XSLT

    是否有任何用于 XSLT 的离线 无需通过网络服务器提交代码 解析器 XSLT IDE 交互式开发环境 X选择器 我已经使用了 6 7 年了 免费 有 MSXML 调试器 有 XSLT 1 0 和 XSLT 2 0 的智能感知 此外还有一些
  • 如何使用 Google API 版本 2 在 Google Apps 日历中添加“附件”?

    我正在使用 NET 的 Google API 版本 2 来创建 Google 日历条目 如何将 附件 添加到 Google 日历 Thanx 我试图自己找到这个问题的答案 在使用以下命令查看各种查询的 XML 结果之后日历 API 源 我很
  • 将鼠标事件从 Java UI 传递到后面的应用程序

    我的问题与要求完全相同如何在 C Vista 中将鼠标事件传递给我后面的应用程序 但我需要同样的透明 Java UI 我可以使用 6 0 轻松创建透明的 Java UI 但无法获取有关通过应用程序将事件传递到后面的任何应用程序 例如浏览器
  • JavaFX 和外部 JAR

    我正在尝试部署 JavaFX 应用程序 但是当我在浏览器中运行它时 它似乎无法在外部 jar 文件中找到类 java lang RuntimeException java lang ExceptionInInitializerError C
  • 具有单个 ManagedObjectContext 的 NSManagedObject 的 NSMergeConflict

    我正在使用 coreData 文件夹和文件之间有一对多的关系 我在整个申请过程中仅使用一个 MOC 我只是将它传递给不同的 viewControllers 执行添加 编辑 删除和保存等操作 我的 rootViewController 使用
  • 在flutter中配置local_auth插件

    我的项目使用 kotlin 当我想使用 Local auth 插件时 出现以下错误 PlatformException no fragment activity local auth plugin requires activity to
  • 如何从 asp.net mvc 2 应用程序中的自定义 ValidationAttribute 内部访问其他属性值?

    我正在使用带有 C 和 DataAnnotations 的 asp net mvc 2 情况是这样的 我有一个针对模型类强类型的自定义控件 该控件在视图上显示多次 但具有不同的属性值 例如标题 例如 问题 1 问题 2 问题 3 等都是标题
  • Python递归查找文件并移动到一个目标目录

    该脚本应递归地遍历 rootpath 目录并查找所有具有 mp4 扩展名的文件 打印具有目录结构的文件列表 然后将文件移动到 destDir 目录 我遇到的问题是当尝试将文件移动到新目录时 只有 rootPath 目录中的文件才会移动到新目
  • 是否有一个随机数生成器可以在 O(1) 中跳过/删除 N 次抽奖?

    是否有任何 非加密 伪随机数生成器可以在 O 1 中跳过 删除 N 个绘图 或者可能是 O log N 但小于 O N 特别是对于并行应用 拥有上述类型的发生器将是有利的 您想要生成随机数数组的图像 人们可以为此任务编写一个并行程序 并独立
  • Flex Datagrid - 如何获取鼠标 x/y 坐标的项目?

    我的任务是在 DataGrid 实例中选择一个项目 除了屏幕上的坐标之外什么都没有 我们正在 Flash 应用程序中实现右键单击功能 目标是能够右键单击 DG 行 这将选择该行并显示包含一些上下文命令的弹出窗口 我已经设法在我的 Flex
  • WCF DataServices (CTP2):客户端和服务之间存在类型不匹配

    我正在将 WCF Dataservices CTP2 与 Entity Framework 4 1 结合使用 现在 我尝试通过我的数据上下文获取任何数据 但出现此异常 System Reflection TargetInitationExc
  • 如何在Android中添加2个org.opencv.core.Point对象?

    我是 OpenCV 和 Android 的新手 我正在尝试将 C 代码转换为 java line img matches scene corners 0 Point2f img object cols 0 scene corners 1 P
  • dplyr 自定义滞后函数用于不规则时间序列

    我有一个不规则的时间序列 数据集中存在间隙 此外 数据被分组 滞后函数我已经能够通过观察找到滞后 因此它们在数据集中找到先前的记录 但我想指定一个时间变量并通过匹配滞后时间来计算滞后 这个问题 R滞后 超前不规则时间序列数据正在做类似的事情
  • 升级到 Angular 9 后指令无法与 FormControl 一起使用

    我已经使用指令来启用和禁用表单 这是在一个单独的打字稿文件中 代码如下 import NgControl from angular forms import Directive Input from angular core Directi