2016-02-08 51 views
1

上的角控制器我有事件的數組:添加類的角度上NG-重複時,項目包含在陣列

vm.events = [ 
    { date: "18-02-2016", name: "event A" }, 
    { date: "18-02-2016", name: "event C" }, 
    { date: "24-02-2016", name: "event D" } 
]; 

而且我的所有的日子在當月的數組:

var days = [ 
    { date: "01-02-2016" }, 
    { date: "02-02-2016" }, 
    { date: "03-02-2016" } 
    ... 
]; 

在我的角度視圖我有以下幾點:

<span 
    class="day" 
    ng-class="{ 'today': isToday(day) }" 
    ng-repeat="day in vm.days">{{getDay(day)}}</span> 

我如何添加一個類時,每天都有事件的跨度,E .g。,當這天在vm.events中至少有一條記錄?

回答

1

這裏是您的解決方案:

<div ng-repeat="day in days"> 
    <span ng-class="{true:'today', false: 'day' } [isToday(day.date)]"> 
    {{day.date}} : {{isToday(day.date)}} 
    </span> 
</div> 

檢查工作plunker

0

您可以使用ngClass,做的方法是將你的條件,如:

ng-class="{true:'today'}[isToday(day)]" 
0

首先想到的可能是寫一些函數,它接受一個日期,然後它決定如果日期通過迭代事件數組有任何事件。

這會在每個摘要循環中產生大量不必要的迭代。相反,您可以在數據在ng-repeat中呈現之前操作數據。修改數據,以便每天都有一系列事件。現在你可以檢查當天的事件數組是否包含任何事件。

理想情況下,我會嘗試在服務器上進行更改,以便數據以這種方式下降。但客戶沒有理由不這樣做。這裏有一個簡單的實現:

angular.forEach(vm.days, function(day) { 
    // this modifies the day objects in vm.days, if you didn't want to 
    // do that you could copy them and produce a separate array of days 
    // with events... 
    day.events = vm.findEventsFor(day)) 
}); 

vm.findEventsFor(day) { 
    var events = []; 
    angular.forEach(vm.events, function(event) { 
    if (event.date === day.date) { 
     events.push(event); 
    } 
    } 
    return events; 
} 

ng-class可能是這樣的:

ng-class="{today: isToday(day), hasEvents: day.events.length > 0}"