【问题标题】:AngularJS: How to set a variable inside of a template?AngularJS:如何在模板内设置变量?
【发布时间】:2013-05-15 22:38:55
【问题描述】:

如何避免第三行中的{{f = ...}} 语句打印出forecast[day.iso] 的内容?

我想避免在每次迭代中使用forecast[day.iso].temperature 等等。

<div ng-repeat="day in forecast_days">
  {{$index}} - {{day.iso}} - {{day.name}}
  {{f = forecast[day.iso]}}
  Temperature: {{f.temperature}}<br>
  Humidity: {{f.humidity}}<br>
  ...
</div>

【问题讨论】:

  • 这可能不是一个答案,但有用的提示是使用 {{f = forecast[day.iso];""}} 因为它不会在视图上打印任何内容。

标签: javascript angularjs ng-init


【解决方案1】:

使用 ngInithttps://docs.angularjs.org/api/ng/directive/ngInit

<div ng-repeat="day in forecast_days" ng-init="f = forecast[day.iso]">
  {{$index}} - {{day.iso}} - {{day.name}}
  Temperature: {{f.temperature}}<br>
  Humidity: {{f.humidity}}<br>
  ...
</div>

示例:http://jsfiddle.net/coma/UV4qF/

【讨论】:

  • 如果你想要多个变量,只需用分号';'分隔它们
  • 初学者的提示...根据您的模板结构,您最终可能会得到所有记录仅显示变量的最后一个值(在我的情况下,Angular 在随后的摘要循环中更新了替换,因为它们都绑定到同一个表达式)!为了解决这种情况,您可以将变量分配为正在迭代的当前记录的属性(如果对您的用例可行)。在上面的例子中,这将变成ng-init="day.f = forecast[day.iso]"
【解决方案2】:

它是not the best answer,但它也是一个选项:因为您可以连接多个表达式,但只呈现最后一个,您可以使用"" 完成您的表达式,并且您的变量将被隐藏。

因此,您可以使用以下方式定义变量:

{{f = forecast[day.iso]; ""}}

【讨论】:

  • 这是一个记录在案的功能吗?
  • @DanielF,我找不到。我刚刚看到this 评论,测试了这个想法,喜欢它并决定添加作为答案,因为它具有更高的可见性并且更难丢失。
  • @DanielF,刚刚发现这个投票率很高的answer 提出了相同的解决方案。它也没有文档链接。
  • @DanielF,我已经更新了我的答案。我不得不问a question 才能更好地理解它。这不是一个特殊功能。只是连接表达式的行为。
  • 当您希望表达式绑定到范围更改而不是在初始化时运行一次时,此技巧特别有用。
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 2015-07-06
  • 2012-10-11
  • 2018-12-24
  • 2020-02-07
  • 2018-12-02
  • 2019-03-31
相关资源
最近更新 更多