我有一些推文数据,有时数据库会根据服务器(本地,制作等)返回不同的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> -->
如果ng-bind
存在,是否有办法检入t.text
?如果没有,那么将模型设置为t.highlights.text
?
在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>
答案 0 :(得分:3)
根据Ben的建议,这根本不应该在视图中,它应该在控制器中,它负责呈现视图渲染的数据模型。
$scope.tweets.forEach(function(t) {
t._content = t.text || t.highlights.text || '';
});
然后在您的视图中呈现t._content
,而不是t.text
等。
答案 1 :(得分:2)
控制器:
$scope.isHighlights = false;
$scope.tweets = [];
$scope.getTweets = $http.get('url').then(function(data){
//Get first tweet and set isHighlighted bool based on the property being defined
$scope.isHighlighted = angular.isDefined(data[0].highlights);
$scope.tweets = data;
});
查看:
<div data-ng-if="isHighlights">
<section data-ng-repeat="t in tweets">{{t.highlights.text}}</section>
</div>
<div data-ng-if="!isHighlights">
<section data-ng-repeat="t in tweets">{{t.text}}</section>
</div>
内存更轻,绑定更少,并且更容易阅读其他人签出代码。有一百万种皮肤养猫的方法。这种方式假设它们都是一种格式或另一种格式,并且在一个屏幕上可能会有很多推文。