Я хочу использовать ng-infinite-scroll (https://sroze.github.io/ngInfiniteScroll/). Но когда я хочу вызвать функцию из моей службы (внедренной в контроллер), ничего не происходит (эта функция не срабатывает). Когда я вызываю функцию не из службы, а из $scope контроллера - все работает нормально. Как вызвать функцию из внедренного сервиса в директиве бесконечной прокрутки?
Моя структура HTML:
<div class="col-xs-12 publications-container" ng-controller="showPublicationsCtrl">
<h3 class="publ-heading">Proposed Publications</h3>
<ul class="list-group" infinite-scroll="publicationsFactory.getPublications()" infinite-scroll-disabled='publicationsFactory.busyLoadingData'>
<li ng-repeat="publication in publications" class="list-unstyled list-group-item" ng-cloak>
<p class="text-warning">Author: <i>{{publication.author}}, {{publication.timestamp | date: 'MMM. d, y'}}</i></p>
<p ng-text-truncate="publication.text" ng-tt-words-threshold="3">{{publication.text}}</p>
<p class="text-muted">Channels: <i>{{publication.channels.join(", ")}}</i></p>
</li>
</ul>
</div>
Мой showPublicationsCtrl
контроллер:
twitterApiApp.controller("showPublicationsCtrl", ['publicationsFactory', '$scope', function (publicationsFactory, $scope) {
publicationsFactory.getPublications();
$scope.publications = publicationsFactory.publications;
}]);
Мой publicationsFactory
сервис:
angular.module('twitterApiApp').factory('publicationsFactory', ['$http', function($http) {
var publicationsFact = {};
publicationsFact.publications = [];
publicationsFact.busyLoadingData = false;
publicationsFact.getId = function() {
publicationsFact.id = publicationsFact.publications.length > 0 ?
publicationsFact.publications[publicationsFact.publications.length-1]['id'] : 0;
};
publicationsFact.getPublications = function () {
console.log("Triggered");
if (publicationsFact.busyLoadingData) return;
publicationsFact.busyLoadingData = true;
publicationsFact.getId();
$http.get("/Publications?id_gte=" + publicationsFact.id + "&_limit=2").then(function(response) {
for (var i = 0; i < response.data.length; i++) {
publicationsFact.publications.push(response.data[i]);
};
});
publicationsFact.busyLoadingData = false;
};
return publicationsFact;
}]);
Если я создам какую-то функцию в своем контроллере, например $scope.myFunction
, а затем в структуре HTML я назначу атрибут infinite-scroll
для myFunction()
, функция будет успешно выполнена. Итак, я думаю, что, возможно, есть некоторые ошибки в том, как я внедряю службу в контроллер. Но все остальное, кроме ng-inginite-scroll, работает по плану.