Фильтр по диапазону даты для директивы angular-nvd3?

Я создаю граф nvd3 с директивой angular-nvd3:

<nvd3 id="analytics-community" options="vm.community.options" data="vm.community.data" config="vm.graphConfig" class="with-3d-shadow with-transitions"></nvd3>

Однако представляется невозможным отфильтровать атрибут данных с помощью |filter:something как это заканчивается в бесконечном цикле и угловых разрывов с ошибкой бесконечного цикла.

Параметры графика настраиваются с помощью:

vm.graphOptions = {
    chart: {
        type: 'lineChart',
        height: 300,
        margin : {
            top: 50,
            right: 50,
            bottom: 50,
            left: 50
        },
        x: function(d) {
            return d3.time.format.iso.parse(d.key);
        },
        y: function(d) {
            return d.value;
        },
        useInteractiveGuideline: false,
        dispatch: {
            stateChange: function(e) { },
            changeState: function(e) { },
            tooltipShow: function(e) { },
            tooltipHide: function(e) { }
        },
        xScale: d3.time.scale(),
        xAxis: {
            axisLabel: 'Date',
            tickFormat: function (d) {
                return d3.time.format('%b %Y')(new Date(d));
            }
        },
        yAxis: {
            axisLabel: 'Count',
            tickFormat: function(d) {
                return d;
            }
        }
    }
};

И данные настроены с:

vm.community.data = [
    {
        key: 'Members',
        values: vm.statsModel.registeredMembers
    },
    {
        key: 'Students',
        values: vm.statsModel.registeredStudents
    },
    {
        key: 'Alumni',
        values: vm.statsModel.registeredAlumni
    }
];

Где vm.statsModel.registeredMembers выглядит так:

[
  {
    key: "2015-06-15",
    value: 458
  },
  {
    key: "2015-06-23",
    value: 459
  },
  {
    key: "2015-06-27",
    value: 460
  }
]

Есть идеи?

1 ответ

Решение

Установка xDomain в vm.graphOptions.chart сработала:

vm.graphOptions.chart.xDomain = [new Date(vm.selectedItem.date), dateToday]

куда vm.selectedItem.date = new Date().setMonth(new Date().getMonth() - 6) 6 месяцев назад... и dateToday = new Date()

Так что я просто $ наблюдаю за изменениями в vm.selectedItem, который изменяется в окне выбора, и обновляю xDomain.

Другие вопросы по тегам