【问题标题】:Array in NgClass with method call and variable带有方法调用和变量的 NgClass 中的数组
【发布时间】:2017-01-09 11:09:08
【问题描述】:

我想将[ngClass] 与返回类似{currentWeek: true} 的对象的方法调用一起使用,并且我想添加可以具有值rejected 的var week.state

我希望 HTML 看起来像这样:<div class="currentWeek rejected"></div> 但是当我使用它时,我得到了这个错误:

Error in ./FlexCalendar class FlexCalendar - inline template:29:13 caused by: NgClass can only toggle CSS classes expressed as strings, got [object Object]

如何将方法调用和变量组合到 ngClass 中?类似[ngClass]=[setWeekClasses(week), week.state]

setWeekClasses(week: Week): Object {
    let state: string = this.state(week.state);
    return {
        'currentWeek': week.weekNumber === this.selectedDate.getWeekNumber(),
        [week.state]: true,
    };
}

【问题讨论】:

  • 你能在返回对象的地方添加你的方法吗?
  • @echonax 已添加 ;)
  • 改成[ngClass]=setWeekClasses(week)就行了

标签: angular ng-class


【解决方案1】:

不鼓励绑定到方法或函数,返回一个新的对象实例尤其糟糕。

你至少应该缓存结果

oldWeek;
oldStyles;
setWeekClasses(week: Week): Object {
    if(this.oldWeek != week) {
      let state: string = this.state(week.state);
      this.oldStyles = {
        'currentWeek': week.weekNumber === this.selectedDate.getWeekNumber(),
        [week.state]: true,
      };
      this.oldWeek = week;
    }

    return this.oldStyles;
}

那么你可以像这样使用它

[ngClass]="setWeekClasses(week)"

这个绑定

[ngClass]=[week.state, getWeekState(week)]

无效,因为ngClass 支持字符串、字符串列表和具有字符串值的对象,而[week.state, getWeekState(week)] 生成的列表包含字符串和对象,这是不受支持的。

【讨论】:

  • 很好的解释。谢谢。即使在数组中有undefined 也会导致错误渲染。
【解决方案2】:

您可以使用方法和变量来构造 ngClass 的类字符串。

例如,这里有一个提供方法的类和一个提供类信息的对象变量:

class { 

   getCSSClass() {
     return  { state: "rejected" }
   }

 week:object = {
    state: 'rejected'
  }
}

在模板中,你可以使用方法和变量来构造 ngClass 的类字符串。

   <div [ngClass]="getCSSClass().state + ' currentWeek'">">
      <h2>Hello {{name}}</h2>
   </div>

或者你可以写:

@Component({
  selector: 'my-app',
  template: `
    <div [ngClass]="week.state + ' ' + getCSSClass().state">
      <h2>Hello {{name}}</h2>
    </div>
  `,
})

在 plunker 中查看:http://plnkr.co/edit/JfN5cjbCjNAUs8qx9oh1

【讨论】:

  • 为什么我不能写[ngClass]=[week.state, getWeekState(week)]之类的东西
  • 我更新了答案和 plunker;我猜你想写的东西不受 ngClass 语法的支持。 angular.io/docs/ts/latest/api/common/index/…
  • 我添加了新代码来解释我的问题。但我认为 ngClass 不可能将方法调用和变量结合起来
  • 我在 plunker 做过。检查那里
  • 如果你做一些跟踪,你会发现这种模式会导致重复/无限的摘要循环,因为 Angular 似乎不确定函数的返回值......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2017-06-11
  • 2015-03-01
  • 2017-08-30
  • 2013-07-17
  • 2011-03-18
相关资源
最近更新 更多