【问题标题】:Disable a button in angular depending on value of property of object inside an array?根据数组内对象的属性值禁用角度按钮?
【发布时间】:2018-05-31 23:20:13
【问题描述】:

我有一个对象数组:

keyDisabledArray=[
  {'a':false},
  {'b':true}
]

还有一些按钮

<button class="key" (click)="keyPressed('a')" id="a">A</button>
<button class="key" (click)="keyPressed('b')" id="b">B</button>

必须根据keyDisabledArray的内容禁用。在这种情况下,必须禁用按钮“b”并启用“a”。我正在尝试使用 [disabled],但我不确定如何访问对象数组中的正确值。

编辑:我找到了一些访问该值的方法,但所有方法都是异步的或要求对数组进行完整循环以找到正确的元素,在这两种情况下,我都看到了问题:如何处理前端的异步代码(?) 以及是否可以避免每个按钮在数组上出现完整循环。

【问题讨论】:

  • 你看过async管道吗?
  • 不,那是什么?
  • 这个角度是 1 吗?
  • 确实是 Ionic 2 和 Angular 2
  • 没有。 (点击)仅适用于 Angular 2 而不是 AngularJS。虽然他说

标签: javascript arrays angular


【解决方案1】:

你可以写一个管道来增加正确的值。

编辑:查看如何在这里创建一个接受多个参数的管道How do I call an Angular 2 pipe with multiple arguments?

编辑#2:这是一段示例代码(未测试)

import {Pipe, PipeTransform} from '@angular/core';


@Pipe({
  name: 'isDisabled'
})
export class IsDisabledPipe implements PipeTransform
{

  transform(array: any, key: string): any
  {

    let val = array.find(v => v.hasOwnProperty(key));
    return val? val[key] : false;

  }

}

你可以像这样使用它

 <button class="key" [disabled]="keyDisabledArray | isDisabled:'a'" (click)="keyPressed('a')" id="a">A</button>

否则,为什么不将数组转换为 json 对象?

keyDisabledArray=
{
  'a':false,
  'b':true
};

那么,访问值会更容易

<button class="key" [disabled]="keyDisabledArray['a']" (click)="keyPressed('a')" id="a">A</button>

【讨论】:

  • 是的,我故意试图使事情复杂化以了解是否可能:D 无论如何,非常感谢!我可以问一些关于管道的提示,只是为了知道如何用谷歌搜索它以深入这个论点吗?
  • 我提供了一个 SO 链接,希望对您有所帮助
  • 我添加了一个样本(虽然没有测试)
  • 你是我的个人英雄
猜你喜欢
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2016-05-12
  • 2017-03-19
相关资源
最近更新 更多