【问题标题】:Angular | Display element conditionally角 |有条件地显示元素
【发布时间】:2018-04-24 04:30:21
【问题描述】:

我正在尝试有条件地显示一个元素。我应用于元素的这段代码应该可以工作:

<a [style.display]="chatIsToggled ? 'display: block' : 'display: none'">
  link
</a>

问题在于 Angular 由于“不安全的样式值”而没有应用样式

警告:清理不安全的样式值显示:无(请参阅http://g.co/ng/security#xss)。

实现我想做的事情的等效方法是什么?

【问题讨论】:

  • 该属性名为style.display。所以你不需要在值中重复display[style.display]="chatIsToggled ? 'block' : 'none'"。但为什么不直接使用 *ngIf?
  • 这能回答你的问题吗? Angular 2 Show and Hide an element

标签: angular


【解决方案1】:

不要重复display,你只需要传递值本身:

<a [style.display]="chatIsToggled ? 'block' : 'none'">
  link
</a>

如果您使用具有显示实用程序类的 CSS 框架(如 Twitter Bootstrap),您可以有条件地分配一个特殊类:

<a [class.d-block]="chatIsToggled">
  link
</a>

您也可以只使用 *ngIf 结构指令:

<a *ngIf="chatIsToggled">
  link
</a>

但这确实有稍微不同的语义,因为如果不满足条件,它甚至不会渲染元素。例如,这会影响调用其生命周期方法的时间点。

【讨论】:

  • 是的,就像你说的那样,我没有尝试使用 ngIf,因为每次用户切换聊天窗口时都会导致对我的服务器的新调用
  • 如果这会导致后端调用,您可能应该更改代码的设计,因为这绝对可以避免。 :-) 如果它解决了您的问题,也请将答案标记为已接受。
  • 是的,我只是在等待堆栈让我接受答案。 :)
  • 我只是在聊天组件加载后使用 ngOnInit 挂钩来请求消息。由于聊天组件总是被加载,所以在整个访问过程中只有一次调用,我认为这是一个很好的设计模式?如果我错了,请纠正我
  • 直接在组件中进行http调用并不总是一个好主意。您可以将其抽象为具有适当范围的可注入服务。它只在被要求时加载数据,然后可以缓存它。
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多