【问题标题】:Set CSS values using a value set on component selector (Angular 5)使用组件选择器上的值设置 CSS 值(Angular 5)
【发布时间】:2018-03-06 16:44:08
【问题描述】:

这就是我想要的,下面。基本上,我想在 angular/material 中使用 mat-icon 来访问材质图标,并使用 ngStyle 指令动态调整它们的大小(或者如果有更好的解决方案)。我需要动态大小(我认为),因为我需要做的是围绕 mat-icon 设置一个圆形 2px 边框,该边框的大小取决于 mat-icon 的 font-size 属性的大小(例如一个 36px 的图标需要一个 72px 的边框和一个 38px 的边框半径)。 我仍在学习 Angular/Material 以及它是如何工作的,而我不想做的是硬编码解决方案。相反,如果我可以在组件选择器中放置一个值,然后将该值用作可以分配给 CSS 属性的变量(例如通过 ngStyle),事情就会解决。

注意:下面的代码是 1/2 工作,但在控制台(日志)我得到 undefinedundefinedpx 为价值观。

已编辑:当前代码

import { Component, OnInit, ViewEncapsulation, Input } from '@angular/core';

@Component({
  selector: 'app-circle-icon-container',
  templateUrl: './circle-icon-container.component.html',
  styleUrls: ['./circle-icon-container.component.css'],
  encapsulation: ViewEncapsulation.None
})
export class CircleIconContainerComponent implements OnInit {

  @Input() inputSize: string;
  private fontSize = this.inputSize + 'px';

  constructor() {
    console.log(this.inputSize);
    console.log(this.fontSize);

   }

  ngOnInit() { }

}

//component.html

<div class="flex center align-center circle-icon-container" [ngStyle]="{ 'font-size': fontSize, 'background-color': background_color }">
  <mat-icon>business</mat-icon>
</div>

//parent component.html
<div class="icon-container flex is-column align-center">
  <app-circle-icon-container inputSize="300"></app-circle-icon-container>
</div>

【问题讨论】:

    标签: javascript angular ng-style


    【解决方案1】:

    好的,现在可以使用了:

    //component.ts
    import { Component, OnInit, ViewEncapsulation, Input } from '@angular/core';
    
    @Component({
      selector: 'app-circle-icon-container',
      templateUrl: './circle-icon-container.component.html',
      styleUrls: ['./circle-icon-container.component.css'],
      encapsulation: ViewEncapsulation.None
    })
    export class CircleIconContainerComponent implements OnInit {
    
      @Input() inputsize: string;
      @Input() backgroundcolor: string;
      public fontSize: string;
      public backgroundColor: string;
    
      constructor() {
    
       }
    
      ngOnInit() {
        console.log(this.inputsize);
        this.fontSize = this.inputsize + "px";
        const sizeContainer = (input) => {
          let container = parseInt(input);
          container = container * 2;
          console.log(container);
          return container;
        }
        const sizeContainerRadius = (input) => {
          let container = parseInt(input);
          container = container*2;
          container += 2;
          console.log(container);
          return container;
        }
        this.containerSize = sizeContainer(this.inputsize) + "px";
        this.backgroundColor = this.backgroundcolor;
        this.radiusSize = sizeContainerRadius(this.inputsize) + "px";
       }
    
    }
    
    //component.html
    <div class="flex center align-center circle-icon-container" [ngStyle]="{ 'width': containerSize, 'height': containerSize, 'border-radius': radiusSize }">
      <mat-icon [ngStyle]="{ 'font-size': fontSize, 'background-color': backgroundColor }">business</mat-icon>
    </div>
    
    //parent component.html
    <app-circle-icon-container inputsize="300" backgroundcolor="#405e7c"></app-circle-icon-container>
    

    【讨论】:

      【解决方案2】:

      用途:

      @Input('icon-size') size: number
      

      【讨论】:

      • 你能详细说明一下吗?然后如何在public font-size=icon-size; 等后续值中使用该值?
      • 你应该用我上面提到的替换'let size = icon-size'行。之后一切都应该正常了。
      • 我已经更新了我的代码,你可以在上面看到。它仍然无法正常工作,因为该值未定义——没有错误,它只是未定义。
      【解决方案3】:

      您应该使用方括号将变量从父组件传递到子组件:

      //parent component.html
      <app-circle-icon-container [inputsize]="300" [backgroundcolor]="#405e7c"></app-circle-icon-container>
      

      您可以在子组件中使用不同的名称,这就是我使用的原因

      @Input('inputsize') youCanNameItAsYouWant: number;
      // Where 'inputsize' is the reference, this should be the same what you use in the square brackets [inputsize]
      // and you can use 'youCanNameItAsYouWant' variable in your child component wherever you want...
      

      您可以在这里查看一个工作示例: https://embed.plnkr.co/RbMKgf8GtLUEPhwLVwWh/

      【讨论】:

      • 当我在输入周围使用 [] 时,它会中断并且不起作用。
      猜你喜欢
      • 2018-10-22
      • 2018-07-22
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多