Я попытался использовать вкладки в "Угловом материале", чтобы упростить навигацию между датами (просто скопировать вкладки для изменения даты), и у меня также есть выбор даты, чтобы быстро перейти к другой дате.
Погрузочная работа прекрасна; Я инициализировал сборщик данных с текущей датой и загрузкой вкладок с каждым днем в текущем месяце.
Если я выбираю дату в другой месяц, я перезагружаю вкладки, чтобы показать соответствующие даты. Чтобы сделать это, я добавлю $ watch на сборщик дат. Эта работа прекрасна, но в конце $ watch я устанавливаю tabSelected, который является индексом отображаемой вкладки. Эта часть не работает, потому что она, как процесс дайджест, не заканчивается.
Я думаю о решении: просто переименуйте вкладки с новым значением. Но есть ли способ сбросить массив и установить индекс, как я:
$scope.$watch('dateSelected', function (newValue, oldValue) {
if ((newValue.getMonth() != oldValue.getMonth())
|| (newValue.getFullYear() != oldValue.getFullYear())) {
$scope.tabs = initialiseGamesTabs($scope.dateSelected);
}
$scope.tabSelected = getTabSelected();
});
Переменная $scope.dateSelected
сама по себе не изменяется, потому что изменение даты изменяет свойство переменной. Вы должны смотреть переменную recursively
, добавив третий аргумент в $watch
как true
.
Код:
$scope.$watch('dateSelected', function (newValue, oldValue) {
if ((newValue.getMonth() != oldValue.getMonth())
|| (newValue.getFullYear() != oldValue.getFullYear())) {
$scope.tabs = initialiseGamesTabs($scope.dateSelected);
}
$scope.tabSelected = getTabSelected();
}, true); // <----------- add true here
Дальнейшее чтение: $ смотреть объект
$watch
обнаруживает изменение, код работает. Многие html-связывания сtabSeleteted
имеют что-то не так ...