typescript Angular ngStyle可以使用多个函数吗?如果不能,有什么解决方案?

yruzcnhs  于 2023-01-18  发布在  TypeScript
关注(0)|答案(1)|浏览(134)

使用ngStyle,您是否能够向多个属性添加多个条件?

我需要根据某个JSON值更改文本颜色和背景颜色。

背景信息:

我正在做一个类似于浏览器的标签栏。每个标签都有一个 * 标题/标题 * 和 * 子标题 *。子标题的样式根据标签/数组数据而改变。标签栏的设计如下所示:

我的重点是副标题风格,规划和FPE的。
下面是我的制表符数组的外观:

tabs = [
    {
      flightName: "Flight 1",
      stagePhase: "PRE-FPE",
      control: "View Only"
    },
    {
      flightName: "Flight 2",
      stagePhase: "PLANNING",
      control: "Plan and Load"
    },
    {
      flightName: "Flight 3",
      stagePhase: "PLANNING",
      control: "Closeout"
    },
    {
      flightName: "Flight 4",
      stagePhase: "FPE",
      control: "View Only"
    }
  ];

如果tabs.tab.control属性为"View Only",则background-color将是透明的,"Plan and Load":浅灰色和"Closeout":白色,然后***也将文本颜色***更改为***透明***。
因此,对于单独的背景颜色,ngStyle函数可以如下所示:(打印稿)

getBgColor(control) {
  switch (control) {
    case 'View Only':
      return '#ffcccc00';
    case 'Editing':
      return '#cce6ff44';
    case 'Closeout':
      return 'white';
  }
}

下面是HTML:(关注ngStyle)

<ul class="tabs" id="tabsList" *ngFor="let tab of tabs">
    
    <li>
      <a href="javascript:void(0)" class="flight-title"> {{ tab.flightName }} </a>
      <a [ngStyle]="{'background': getBackColor(tab.control) }" class="stage"> {{ tab.stagePhase }}
      </a>
      <em (click)="closeTab(tabs.indexOf(tab))" class="close-icon"> </em>
    </li>
</ul>

问题:

现在,对于第二个<a>标记,我希望有两个函数:getBgColor()和getTxtColor()。但是简单地添加另一个函数是不起作用的:

<a [ngStyle]="{'background': getBgColor(tab.control)}, {'color': getTxtColor(tab.control) }" class="stage"> {{ tab.stagePhase }}
      </a>

具有额外功能:

getTxtColor(control) {
    switch (control) {
      case 'View Only':
        return 'white';
      case 'Plan and Load':
        return 'white';
      case 'Closeout':
        return 'ffcccc00';
    }
  }

我不能同时执行这两个函数,并且需要返回它们,我有什么选择?

huwehgph

huwehgph1#

[ngStyle]接纳一个对象,因此您函数可以返回一个具有属性“color”和“background”的对象。

getStyle(control)
{
  if (control=="View Only")
     return { "background-color":"#ffcccc00",color:"white"}

  ...
}

请注意,如果属性具有-,则使用引号
顺便说一句,为什么不添加一个属性“样式”到您的标签?

tabs = [
    {
      flightName: "Flight 1",
      stagePhase: "PRE-FPE",
      control: "View Only",
      style:{ "background-color":"#ffcccc00",color:"white"}
    },
    {
      flightName: "Flight 2",
      stagePhase: "PLANNING",
      control: "Plan and Load"
      style:{ color:"white"}
    },
    {
      flightName: "Flight 3",
      stagePhase: "PLANNING",
      control: "Closeout",
      style:{ "background-color":"white",color:"#ffcccc00"}
    },
    {
      flightName: "Flight 4",
      stagePhase: "FPE",
      control: "View Only"
      style:{ "background-color":"#ffcccc00",color:"white"}
    }
  ];

相关问题