【问题标题】:AngularJS conditionals in HTML AttributeHTML属性中的AngularJS条件
【发布时间】:2012-11-26 16:13:47
【问题描述】:

您将如何根据模型更改html 属性?

我正在尝试根据数组的长度更改输入的占位符文本:

<input placeholder="{{todos.length ? 'Insert todo' : 'Insert your first todo'}}" />

但这似乎不起作用......

JS Bin code example.

【问题讨论】:

  • 你能更好地解释什么不起作用以及你得到什么回应吗?
  • 不应该是这样的:&lt;input placeholder="{{todos.length&gt;N ? 'Insert todo' : 'Insert your first todo'}}" /&gt;
  • 大家好,看看这个 jsbin,我做错了什么?如果我删除输入占位符代码,列表将填充...jsbin.com/evohip/1 谢谢。

标签: html angularjs


【解决方案1】:

三元运算符在这种情况下似乎不起作用,而不是这样做

{{cond ? true : false}}

改成

{{ exp && true || false }}

所以你的placeholder 属性看起来像这样(为了演示目的,我已经缩短了它)

placeholder="{{todos.length > 0 && 'Insert' || 'Insert first'}}"

【讨论】:

  • jm- 谢谢它的工作原理......所以 Angular Expression 不支持三元速记?
  • 它似乎没有,这是有道理的,因为该框架非常面向可测试性,并且您不希望视图中有逻辑。因此,理想情况下,您只需调用在控制器中定义的返回字符串的函数。
  • oic 之类的 getInputPlaceholder() 里面有我的逻辑吗?
  • 我认为在这种情况下你可以侥幸逃脱,因为它是一个占位符。也许只是在您的控制器中有一个isEmpty(),您可以轻松地对其进行测试并将其用于更多用例,然后留下消息以显示在视图中。
  • 很棒的解决方案。在我应该动态更改插入到 ng-repeat 循环内的字段中的指令自定义属性的值的情况下,这对我有用。非常感谢。
【解决方案2】:

对于遇到这种情况的任何其他人(就像我刚刚通过 Google 所做的那样),看起来 Angular 最近在表达式中添加了对三元运算符的支持。我刚刚在 1.2.16 中成功使用它来动态更新一个工具提示(标题)属性。它似乎首次出现在 1.2.17 的文档中,尽管他们仍然普遍不鼓励使用它:

发件人:AngularJS: Developer Guide: Expressions

除了三元运算符 (a ? b : c),您不能在表达式中编写控制流语句。这背后的原因是 Angular 哲学的核心,即应用程序逻辑应该在控制器中,而不是视图中。如果您需要真正的条件、循环或从视图表达式中抛出,请改为委托给 JavaScript 方法。

【讨论】:

  • 我需要在我正在构建的指令的模板中使用它。可能应该将所有内容都放在 .link() 而不是模板中,但模板(目前)感觉非常简单。问题:我需要选择包含一个随机属性“data-toggle”,但不知道怎么做。三元运算符就像一个魅力:
  • 哎呀,意思是写:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多