Ответ 1
Использование:
... page="$parent.currentPage" ...
Или правильное решение:
Когда задействованы вложенные области действия, свяжите свои вары с уровнем ниже i.e.:
$scope.data.currentPage = ...
подробнее здесь
example здесь
У меня есть 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){}
Использование:
... page="$parent.currentPage" ...
Или правильное решение:
Когда задействованы вложенные области действия, свяжите свои вары с уровнем ниже i.e.:
$scope.data.currentPage = ...
подробнее здесь
example здесь
Поскольку вы создаете новый контроллер (ModalDialogBaseCtl) внутри контроллера TestCtrl, Angular создаст новую область, которая наследует все свойства от своего родителя.
Линия, которая выглядит подозрительной для меня, - это то, где вы назначаете значение $scope.currentPage в начале ModalDialogBaseCtrl. Angular будет интерпретировать это, когда вы объявляете новую переменную, называемую currentPage, в новой области. Тем не менее, ваш элемент управления pagination привязан к переменной currentPage в MainCtrl, поэтому просмотр ModalDialogBaseCtl ничего не делает (он никогда не изменяет значение).
Одно исправить - использовать $parent, как предполагает Макс, но это не отличная структура. Вместо этого попробуйте найти способ иметь только одно свойство currentPage вместо двух.