Перезагрузка AngularJs UI-прокрутки не работает
В одном из наших угловых приложений мы используем директиву ui-scroll для отложенной загрузки. Я создал адаптер и назначил директиву ui-scroll. Мне нужно перезагрузить все данные, сделав запрос API и обновить данные.
Из документации ui-scroll мы видим метод reload(), доступный для адаптера, который мы назначаем директиве.
$scope.listAdapter = {adapter:{remain:true}};
Мы передаем этот адаптер в пользовательский источник данных, который в свою очередь назначается повторителю ui-scroll.
Когда пользователь нажимает на кнопку, мне нужно перезагрузить весь результат, извлекая последние результаты из API. Итак, я попытался, добавив,
$scope.listAdapter.reload();
Когда я пытался вызвать метод перезагрузки, он генерирует исключение, заявив, что метод не найден.Ошибка типа: $scope.listAdapter.reload не является функцией
Также я попытался переназначить источник данных и передать пустой адаптер переменной области, но не повезло.
Если кто-то исправил это, пожалуйста, дайте мне знать, что нужно сделать.
3 ответа
Попробуйте определить адаптер как пустой объект:$scope.listAdapter = {};
Я вижу два возможных типа проблем.
Неправильное назначение области. Необходимо принять во внимание, что
ui-scroll
директива вводит декларативно определенные свойства в целевую область с помощью AngularJS$parse
оказание услуг. Это может сделать назначение нетривиальным. Для более подробной информации следуйте документации. Здесь лучше всего использовать синтаксис "Контроллер как".Звони слишком рано. Вы не должны пытаться выполнить
Adapter.reload()
(и другие методы адаптера) передui-scroll
инициализируется, потому чтоui-scroll
внедряет объект Adapter в целевую область во время процесса связывания директивы, который не является немедленным. Для защиты выполнения методов Адаптера вы можете использовать следующий подход:$scope.doReload = function () { if (angular.isFunction($scope.adapter.reload)) { $scope.adapter.reload(reloadIndex); } };
Я также сталкиваюсь с той же проблемой. Моя проблема решена после двухуровневой иерархии объектов.Обратите внимание, что свойства, определенные с помощью присваиваемого выражения, могут быть недоступны. Определите как минимум двухуровневую иерархию объектов на вашем контроллере:
В HTML
<div ng-controller="MyController">
<div ng-if="show">
<div ui-scroll="item in datasource" adapter="container.adapter">
</div>
</div>
</div>
In Controller
.controller('MyController', function($scope) {
$scope.container = { adapter: {} };
}