【发布时间】:2015-04-27 19:47:00
【问题描述】:
我收到了一些推文数据,有时数据库会根据服务器(本地、生产等)返回不同的 JSON 对象。
有时推文内容在tweets[i].text,有时在tweets[i].highlights.text
我当前的标记:
<section ng-repeat="t in tweets">
<div ng-bind-html="t.text">{{t.text}}</div>
<!-- <div ng-bind-html="t.highlights.text">{{t.highlights.text}}</div> -->
如果t.text 存在,有没有办法签入ng-bind?如果没有,则将模型设置为t.highlights.text?
ng-if:
在 div 上使用 ng-if 来呈现列表中的实际推文:
<section ng-repeat="t in tweets" class="social-content">
<a href="http://twitter.com/{{t.fields.user_name}}/status/{{t.id}}" target="_blank">
<header>
<em>+</em>
<span>@{{t.fields.user_name}}</span>
</header>
<div class="body" ng-if="t.text != undefined" ng-bind-html="t.text">{{t.text}}</div>
<div class="body" ng-if="t.highlights.text != undefined" ng-bind-html="t.highlights.text">{{t.highlights.text}}</div>
</a>
<time>{{t.fields.formatted_date_difference}} ago</time>
</section>
【问题讨论】:
-
可以使用
ng-if或ng-switch或者一个简单的指令设置html而不是使用ng-bind-html -
您可以使用 ngIf 进行检查,但可能需要修改一些标记。 docs.angularjs.org/api/ng/directive/ngIf
-
推文总是一种形式还是另一种形式,或者它们可以混合出现吗?
-
如果它们混合在一起,我建议在将它们放入控制器数组之前将它们标准化为一个结构,这样你就不必使用 switch/if 逻辑来丑化视图。
-
@LeonGaban 如果要使用
ng-if属性,并且它们都是相同的结构,我不会将ng-if放入重复的div,而是有两个重复列表,并在控制器isHighlights中设置一个布尔值来检查第一条推文。ng-if=isHighlighted到第一个列表,!isHighlighted到第二个列表。更少的绑定,更容易记忆。
标签: javascript angularjs angularjs-ng-repeat angularjs-ng-model