【问题标题】:How to disable the div tag in angular 2如何在角度 2 中禁用 div 标签
【发布时间】:2017-01-13 18:44:43
【问题描述】:

我试图在该操作成功回调后禁用 div 标签。

请看我的离子含量

<ion-content padding class="forgot-password">
  <div [ngClass]="{active: isOn,disabled: isDisabled}">
    <ion-item>
        <ion-label floating>Email/Mobile</ion-label>
        <ion-input type="text" [(ngModel)]="loginId"></ion-input>
    </ion-item> <br><br>

    <button class="float-right" (click)="generateOTP(!isOn);">Send OTP</button><br><br><br>
  </div>
  <br>

  <div *ngIf="showRePasswd">
    <ion-item>
        <ion-label floating>Enter OTP</ion-label>
        <ion-input type="text" [(ngModel)]="passwd"></ion-input>
    </ion-item> <br><br>

    <button class="float-right" (click)="resetPassword();">Send Password</button>
  </div>
</ion-content>

这是我的 .ts 文件

export class ForgotPasswordPage {

    public loginId = "";
    public passwd = "";

  public showRePasswd = false;
  isDisabled = false;
  isOn = false;

  constructor(private navCtrl: NavController, private logger: Logger, private user: Users) {

  }

  generateOTP(newstate) {
    this.logger.info("invoking generateOTP FN");
    var _this = this;
    this.user.generateOTP(this.loginId, function(result,data){
      if(result == '1') {
        alert(data);
        _this.showRePasswd = !_this.showRePasswd;
        _this.isDisabled = true;
        _this.isOn = newstate;
      }
      else {
        //this.showRePasswd = this.showRePasswd;
        alert(data);
      }
    })
  }

  resetPassword() {
    this.logger.info("invoking resetPassword FN");
    var _this = this;

    this.user.resetPassword(this.passwd, function(result,data) {
      if(result == '1') {
        alert(data);
        _this.navCtrl.push(LoginPage);
      }
      else {
        alert(data);
      }
    })
  }
}

我尝试了[ngClass],但我无法在成功回调后禁用我的 div 标签。

我也尝试过使用[disabled],但不起作用

这是一个 demo 用于禁用 div 标签,但在我的情况下不起作用

我的要求是让我的输入框和按钮在成功回调后被禁用

【问题讨论】:

    标签: angular ionic2


    【解决方案1】:

    你可以添加类似的属性

    <div [attr.disabled]="isDisabled ? true : null">
    

    但是&lt;div&gt; 不支持disabled 属性。

    也许这就是你想要的

    <div (click)="isDisabled ? $event.stopPropagation() : myClickHandler($event); isDisabled ? false : null"
       [class.isDisabled]="isDisabled"></div>
    

    使用一些自定义 CSS,使 .isDiabled 看起来被禁用。

    创建一个将代码放在那里而不是内联的方法可能会更好。

    【讨论】:

    • 不再使用 ngClass 我尝试了你的答案,但我仍然能够在我的 div 标签中编辑我的输入字段
    • div 不能被禁用(HTML 限制,不是 Angular2 限制)。您可以设置 disabled 属性并将 CSS 应用到它,或者在实际上可以单独禁用的所有子元素上设置 disabled
    • 要添加到@MohanGopi 所说的内容,还会生成设置了 [attr.disabled] 的 div 的(单击)事件。所以我们不能禁用那个 div 的点击。
    • 你可以使用&lt;div&gt;(click)="$event.preventDefault();false"&lt;/div&gt;
    • 对了,我也把preventDefault改成了stopPropagation。另见stackoverflow.com/questions/35274028/…
    【解决方案2】:

    您可以在标签 div 中使用 CSS 属性 pointer-events: none;

    <ion-content padding class="forgot-password">
      <div style="pointer-events: none;">
       ...
      </div>
    </ion-content>
    

    【讨论】:

      【解决方案3】:

      这在我的 Angular 8 项目中使用: 首先设置为 HTML 文件,如下所示。 设置为 Div 标签 ngClass=>

      <div class="col-md-3" [ngClass]="{disabledNoOfCasesDiv: !isActiveNOofCasesNo}>
      <label class="control-label mb-2">No. of Cases Receive</label>
      <input type="number" class="form-control" [(ngModel)]="CollectJob.NoOfCases"
      placeholder="No. Cases Receive" name="NoCasesReceive">
      </div>
      

      然后下一步编写用于禁用事件的 CSS:

      .disabledNoOfCasesDiv{ pointer-events: none; opacity: 2.0;}
      

      最后一个:

      声明变量并设置为布尔值

       isActiveNOofCasesNo: boolean;
      

      接下来只要在你想要启用或禁用 div 标签的地方传递 true/false 值,div 将自动启用或禁用。

      this.isActiveNOofCasesNo = true;
      this.isActiveNOofCasesNo = false;
      

      谢谢.....祝您学习愉快!...:)

      【讨论】:

        【解决方案4】:

        您可以使用 Angular 指令轻松启用/禁用 DOM 元素:-

        创建一个简单指令 - DisableDirective

        import { AfterViewInit, Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';
        
        const DISABLED = 'disabled';
        const APP_DISABLED = 'app-disabled';
        const TAB_INDEX = 'tabindex';
        const TAG_ANCHOR = 'a';
        
        @Directive({
          selector: '[appDisable]'
        })
        export class DisableDirective implements OnChanges, AfterViewInit {
        
          @Input() appDisable = true;
        
          constructor(private eleRef: ElementRef, private renderer: Renderer2) { }
        
          ngOnChanges() {
            this.disableElement(this.eleRef.nativeElement);
          }
        
          ngAfterViewInit() {
            this.disableElement(this.eleRef.nativeElement);
          }
        
          private disableElement(element: any) {
            if (this.appDisable) {
              if (!element.hasAttribute(DISABLED)) {
                this.renderer.setAttribute(element, APP_DISABLED, '');
                this.renderer.setAttribute(element, DISABLED, 'true');
        
                // disabling anchor tab keyboard event
                if (element.tagName.toLowerCase() === TAG_ANCHOR) {
                  this.renderer.setAttribute(element, TAB_INDEX, '-1');
                }
              }
            } else {
              if (element.hasAttribute(APP_DISABLED)) {
                if (element.getAttribute('disabled') !== '') {
                  element.removeAttribute(DISABLED);
                }
                element.removeAttribute(APP_DISABLED);
                if (element.tagName.toLowerCase() === TAG_ANCHOR) {
                  element.removeAttribute(TAB_INDEX);
                }
              }
            }
            if (element.children) {
              for (let ele of element.children) {
                this.disableElement(ele);
              }
            }
          }
        }
        

        现在将此指令与您的组件 div 一起使用:-

        <div [appDisable]="true">
        </div>
        

        注意 - 不要忘记在你的 AppModule 中注册指令。

        详细说明请参考POST

        【讨论】:

        • 它只适用于纯 div。如果 div 包含 material 元素,则它不起作用。
        【解决方案5】:

        在html中

        在.ts中

        disable_condition = 真或假

        True 将禁用内容初始化。

        【讨论】:

        • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
        【解决方案6】:

        不能像表单控件那样禁用 Div 元素。您可以改为禁用 div 中的表单控件。

        提供的示例具有自定义类“已禁用”

        styles: [`
            .button {
              width: 120px;
              border: medium solid black;
            }
        
            .active {
              background-color: red;
            }
        
            .disabled {
              color: gray;
              border: medium solid gray;
            }
          `] 
        

        【讨论】:

        • 我真的不明白你想要达到什么目的。你能提供想要的效果吗? [ngClass]="{active: isOn,disabled: isDisabled}">在您的模板文件中。
        • @MohanGopi 您还可以构建一个自定义容器(指令),该容器将按需禁用所有子容器。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        • 2017-08-13
        • 2017-07-16
        相关资源
        最近更新 更多