2016-12-15 11 views
0

ng-repeatでフィードを実装する必要があります。フィード項目は期限によって並べ替える必要があります。しかし、イベントや行動が異なるため、それぞれのアイテムに同じテンプレートを使用することはできません。このようなフィードイベントをレンダリングするにはng-ifを使用しますか?ng-repeatのテンプレートとオブジェクトが異なる

<ul ng-controller="FeedController as FeedCtrl"> 
<li ng-repeat="feedItem in FeedCtrl.feedFactory.feedItems | orderBy '-date_created'"> 
    <div feed-comment-liked ng-if="feedItem.type == 'comment_liked'" item-info ="feedItem"> 
    <div feed-comment-reply ng-if="feedItem.type == 'comment_reply'" item-info ="feedItem"> 
    <div feed-friend-request ng-if="feedItem.type == 'friend-request'" item-info ="feedItem"> 
</li> 
</ul> 

これはもちろん、独自のテンプレートを使用して、それぞれ、feedCommentLiked、feedCommentReply、およびfeedFriendRequestと呼ばれるディレクティブの数を必要とし、結合アイテム情報を通じてデータを取得します。

私はこれは大丈夫だと思いますが、他の人たちがこの道を歩いていることを願っています。複数のng-repeatリストを含まない理由の中で最も明白な制約は、同じ「date_created」属性で順序付けする必要があることです。

答えて

0

シン・ディレクティブ・アプローチを使用すると、1つのディレクティブを持つことができます。

<ul ng-controller="FeedController as FeedCtrl"> 
<li ng-repeat="feedItem in FeedCtrl.feedFactory.feedItems | orderBy '-date_created'"> 
<div thin-directive="{{myConfig[feedItem.type]}}" item-info ="feedItem"> 
    </li> 
</ul> 

$scope.myConfig = { 
    comment_liked: 'template url here', 
    comment_reply: 'template url here', 
    friend-request: 'template url here', 
} 

----- 

.directive('thinDirective', function($compile,$templateRequest) { 
return { 
    restrict: 'A', 
    scope: false, 
    compile: function(element, attrs) { 
    return function (scope, element, attrs) { 
    $templateRequest(attrs.thinDirective).then(function(html){ 
     var template = angular.element(html); 
     element.append(template); 
     $compile(template)(scope); 
    }); 
    } 
} 

}; 

またはthinディレクティブの代わりにng-includeを使用できますが、N個のサブスコープが作成されます。あなたの電話

<ul ng-controller="FeedController as FeedCtrl"> 
<li ng-repeat="feedItem in FeedCtrl.feedFactory.feedItems | orderBy '-date_created'"> 
<div ng-include="myConfig[feedItem.type]" item-info ="feedItem"> 
    </li> 
</ul> 
+0

ng-repeated要素のinnerHtmlにng-ifステートメントがないことを除けば、問題を1つのファイルに集中できます。しかし、それはそれについてです。良いアプローチかもしれない。 – chipmunkrumblestud

+0

しかし、私はこの回避策がフレームワークを適切に活用していないと感じることはできません。 -/ – chipmunkrumblestud

+0

この場合、ng-repeatに関する3xNの比較(if文)を実行していないのは正直な対応ではありません。マップから値を取り出し、テンプレートを適用するだけです。また、ng-includeを使用してサブスコープを作成することもありません。必要に応じてng-includeを使用できますが、その場合はN個のサブスコープを作成します。ですから、角度に対するネイティブソリューションは上記のng-includeとmap myConfigの使用になりますが、このソリューション(細いディレクティブを使用)ではパフォーマンスが向上します。私はng-includeソリューションで私の答えを更新しました – Melzar

関連する問題