Angular ui.bootstrap pagination - текущая страница не обновляется/не работает

У меня есть pagination внутри a dialog обе директивы имеют ui.bootstrap. Проблема в том, что $watch не работает для элемента currentPage.

Теперь аналогичный код отлично работает для других страниц, где разбиение на страницы не находится внутри какого-либо диалога.

Я полагаю, что эта проблема связана с $scope, но тогда в области видимости доступен currentPage, и я могу отобразить ее в шаблоне с помощью {{currentPage}}

Пожалуйста, найдите код в plunker

$scope.$watch('currentPage') не запускается при нажатии ссылок на страницы.

Теперь для обходного пути я мог бы использовать обратный вызов on-select-page, предоставляемый директивой разбиения на страницы.

например.

<pagination on-select-page="pageChanged(page)" total-items="totalItems" items-per-page = "numPerPage" page="currentPage" max-size="maxSize"></pagination>

и внутри моего контроллера я могу иметь

$scope.pageChanged = function(page) {
  console.log(page);    
};

Но мне нужно понять, почему в таких случаях $scope.$watch не работает.

Обновление: С помощью следующей консоли следует оценить значение

$$watchers: Array[1] 
0th: Object
  eq: false
  exp: "currentPage"
  fn: function (o,n){}

Ответ 1

Использование:

... page="$parent.currentPage" ...

Или правильное решение:

Когда задействованы вложенные области действия, свяжите свои вары с уровнем ниже i.e.:

$scope.data.currentPage = ...

подробнее здесь

example здесь

Ответ 2

Поскольку вы создаете новый контроллер (ModalDialogBaseCtl) внутри контроллера TestCtrl, Angular создаст новую область, которая наследует все свойства от своего родителя.

Линия, которая выглядит подозрительной для меня, - это то, где вы назначаете значение $scope.currentPage в начале ModalDialogBaseCtrl. Angular будет интерпретировать это, когда вы объявляете новую переменную, называемую currentPage, в новой области. Тем не менее, ваш элемент управления pagination привязан к переменной currentPage в MainCtrl, поэтому просмотр ModalDialogBaseCtl ничего не делает (он никогда не изменяет значение).

Одно исправить - использовать $parent, как предполагает Макс, но это не отличная структура. Вместо этого попробуйте найти способ иметь только одно свойство currentPage вместо двух.