【问题标题】:not set property value on div with javascript in angular不使用 javascript 在 div 上设置属性值
【发布时间】:2019-08-22 06:59:41
【问题描述】:

我需要在使用 javascript 点击 div 时设置这些属性:

maximunWidth() {
    var parentDiv = document.querySelector(".cadr");
    parentDiv.setAttribute("width",(this.size.width - 2).toString());
    parentDiv.setAttribute("height",(this.size.height - 41).toString());
}

这是我的 html 代码:

<div id="cadr" class="cadr col-md-6 col-xl-6 col-sm-12 col-lg-6"></div>
<div class="minmize" (click)="maximunWidth()"></div>

有什么问题?我该如何解决这个问题?

【问题讨论】:

  • 您使用的是什么版本的 Angular?您是否在 HTML 中尝试过 ng-click="maximunWidth()"(如果您使用的是 angularjs v1.x)?
  • 我使用 click 。角度版本 8

标签: javascript angular typescript


【解决方案1】:

推荐直接改变dom元素可以使用ngStyle 指令

模板

<div id="cadr" class="cadr col-md-6 col-xl-6 col-sm-12 col-lg-6" 
     [ngStyle]="{'width.px':width ,'height.px':height  }"></div>
<div class="minmize" (click)="maximunWidth()"></div>

组件

public width = 'initial'; // ? default value 
public height  = 'initial'; // ? default value 

public maximunWidth() { 
 this.width = this.size.width - 2;
 this.height = this.size.height - 41;
}

【讨论】:

    【解决方案2】:

    尽量避免直接访问 html 元素。 Angular 的全部意义在于(非常简化)为您处理 DOM。

    与其直接设置属性,不如让 Angular 为您处理:

    <div id="cadr" class="cadr col-md-6 col-xl-6 col-sm-12 col-lg-6"
         [ngStyle]="{'width': calculatedWidth, 'height': calculatedHeight}"></div>
    <div class="minmize" (click)="maximunWidth()"></div>
    

    然后用打字稿中的计算值填充这些值:

    maximunWidth() {
        this.calculatedWidth = ...;
        this.calculatedHeight = ...;
    }
    

    【讨论】:

      【解决方案3】:
      <div id="cadr" class="cadr col-md-6 col-xl-6 col-sm-12 col-lg-6"  [style.width]="widthDiv+'%'" [style.height]="heightDiv+'%'"></div>
      <div class="minmize" (click)="maximunWidth()"></div>
      

      或者,

      <div id="cadr" class="cadr col-md-6 col-xl-6 col-sm-12 col-lg-6"  [style.width]="widthDiv+'px'" [style.height]="heightDiv+'px'"></div>
      <div class="minmize" (click)="maximunWidth()"></div>
      

      .ts

      public maximunWidth() { 
       this.widthDiv= this.size.width - 2;
       this.heightDiv= this.size.height - 41;
      }
      

      【讨论】:

        【解决方案4】:

        在您的实现方式中,无论何时单击它都会减小该div 标记的尺寸。尝试使用属性绑定。

        cssClass = 'oldSize'
        maximunWidth() {
            this.cssClass = 'newSize'
        }
        

        在你的 html 中

        <div id="cadr" [class]=" 'cadr ' + 'col-md-6 ' + 'col-xl-6 ' + 'col-sm-12 ' + 'col-lg-6 ' + cssClass"></div>
        <div class="minmize" (click)="maximunWidth()"></div>
        

        【讨论】:

        • 有一个小错误'cadr' 'col-md-6' => 'cadr' + 'col-md-6' ... ?
        • 我觉得还是用[ngClass ] ="{'cadr col-md-6 col-xl-6 col-sm-12 col-lg-6' : true ,newSize : toggleState , oldSize : !toggleState"比较好,我就是喜欢用ngStle和ngClass??
        猜你喜欢
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        相关资源
        最近更新 更多