【问题标题】:How to change the buttons color on an event?如何更改事件的按钮颜色?
【发布时间】:2019-07-26 11:10:58
【问题描述】:

我想在事件中更改按钮颜色。我尝试了两种方法,但都失败了。第一个选项我什至无法启动应用程序,第二个选项颜色只是没有改变。

1。 HTML

<ion-button [color]="done ? 'primary' : 'danger'"> </ion-button>

TS

public done: boolean = true;

func() { 
this.done = !this.done;
}

2。 HTML

     <ion-button (click)="toggleNamedColor()"></ion-button>

TS

public ionicNamedColor: string = 'light';
public ionicNamedColor2: string = 'primary';

public toggleNamedColor(): void {
  if(this.ionicNamedColor === 'light') { 
    this.ionicNamedColor = 'primary'
  } else {
    this.ionicNamedColor = 'light'
  }

【问题讨论】:

  • 您是否尝试过使用 ngClass 或各种角度指令? stackoverflow.com/questions/44535515/…
  • 前两个代码 sn-ps 应该可以工作,所以当func 被调用时,颜色应该会改变。当我测试它时,它对我来说工作得很好。请提供重现问题的演示。
  • 第一种方法你需要使用[style.color]="..."
  • @Tim,ionic 4 有color = "...",与 Angular 不同。所以当带有变量[color]的三元运算符是正确的。
  • ion-button 用作属性时,第一个语法似乎有效:&lt;button ion-button ... /&gt;。见this stackblitz

标签: javascript angular typescript ionic4


【解决方案1】:

您可以使用ngStyle 指令执行此操作。 Here'sstackblitz 也是一样。

.ts

export class AppComponent  {
  toggle: boolean;

  toggleColor() {
    this.toggle = !this.toggle;
  }
}

.html

<button (click)="toggleColor()"
        [ngStyle]="{
          'background-color' : toggle ? 'yellow' : 'pink'
        }"
>Click me</button>

【讨论】:

    【解决方案2】:

    看看Stackblitz

    .ts 文件

    export class AppComponent  {
      name = 'Angular';
      toggle: boolean ;
      propColor:string ='red' ;
    
      changeColor() {
        this.toggle = !this.toggle;
        if(this.toggle ==true){
          this.propColor = 'blue'
    
        }else{
          this.propColor = 'red'
        }
    
        //console.log(this.toggle);
      }
    }
    

    html模板

    <button (click)="changeColor()"
            [ngStyle]="{
              'background-color' :  propColor 
            }"
    >Toggle Color</button>
    

    【讨论】:

      【解决方案3】:

      编辑:不要这样做

      我会这样做:

      <ion-button [color]="getColor()"></ion-button>
      

      然后在后面写一个返回你想要的颜色的代码:

      getColor(): string {
        return this.done ? 'primary' : 'danger';
      }
      

      【讨论】:

      • 这与前两个 sn-ps OP 呈现的有什么不同,而且,这更糟糕,因为在模板中调用了一个函数,该函数在每次更改检测时触发。
      • @ajt_82 - 你认为我故意让事情变得更糟吗?如果我犯了一个错误,那就太好了。
      • 抱歉,我不是故意的 :) 强烈建议不要在模板中调用函数,在最坏的情况下会导致似乎是无限循环并导致浏览器崩溃。这不是一个无限循环,它只是发生变化检测。请参阅以下示例。输入输入并查看控制台以了解如何调用 getColor。这里我们只有一个输入,如果我们的组件中有很多事情发生,就像我们通常做的那样,变化检测一直在发生,并且该函数被一遍又一遍地调用。 stackblitz.com/edit/angular-ionic-4-wzh9eq?file=src/app/home/…
      • 这是一个非常简单的例子,但是如果这个函数做了一些非常昂贵的事情,比如 http 调用,它会极大地影响性能,并且还可能导致浏览器崩溃,因为 http -call 会被一遍又一遍地调用。因此,如果您确切地知道自己在做什么,请仅在模板中使用函数 :) 这就是 Angular 团队警告不纯管道的原因,因为它基本上相当于在模板中调用函数,因为它们在每次更改检测时运行。这也是为什么没有像 angularjs 那样在 angular 中内置 orderByfilter 管道的原因。
      • 谢谢。是的,几周前我确实做了一些昂贵的事情,就像这样,完全融化了浏览器。我当时真的不明白为什么。感谢您的洞察力:)
      猜你喜欢
      • 2018-04-03
      • 1970-01-01
      • 2021-12-22
      • 2019-08-25
      • 1970-01-01
      • 2019-10-13
      相关资源
      最近更新 更多