ich hinzufügen Paginierung auf meiner Website:AngularJS Paginierung und nach dem Wechsel das Ausrufen Post-Server, Doppel-Anfrage
<pagination
ng-model="currentPage"
total-items="printResult.pg"
max-size="printResult.pg"
boundary-links="true">
</pagination>
<ul>
<li ng-repeat="offer in printResult.offers">
<p>{{offer.name}}</p>
</li>
</ul>
Nun, wenn Benutzer eine andere Seite klicken, Skript sollte Post-Anforderung an den Server aufrufen. Es funktioniert, aber führt zweimal und nicht einmal. In Firebug kann ich sehen, es gibt zwei Anfragen an den Server, sollte einer sein.
angular.module('PostService', [])
.controller('PageCtrl', function ($scope, PostModel) {
var srv = this;
srv.offers = [];
var urlFromForm = '';
$scope.$watch("currentPage + numPerPage", function() {
if(urlFromForm.url) {
console.log("Klikam + " + $scope.currentPage);
console.log("Url: " + urlFromForm.url);
pageNumber = $scope.currentPage;
postUrlToService(urlFromForm);
}
});
function postUrlToService(url) {
$scope.dataLoading = true;
$scope.printResult = null;
urlFromForm = url;
initCreate();
PostModel.postUrl(url).then(function (result) {
srv.offers = result.data;
$scope.totalItems = srv.offers.pg;
$scope.printResult = srv.offers;
$scope.dataLoading = false;
});
}
function initCreate() {
srv.newUrl = {url: ''};
}
srv.postUrlToService = postUrlToService;
})
.constant('ENDPOINT', 'http://localhost:8080/api/send')
.service('PostModel', function ($http, ENDPOINT) {
var service = this;
function getUrl() {
return ENDPOINT;
}
service.postUrl = function (url) {
return $http.post(getUrl(), url);
};
});
Was ist los?
EDIT:
ich eine Fehlermeldung anzeigt, meine Funktion $scope.$watch
zweimal ausführen. Wenn ich auf die nächste Seite klicke, fängt die Nummer ein, aber einmal die Nummer der ersten Seite. Die nächste Seite leuchtet nicht auf. Die ganze Zeit leuchtet die Taste 1 Seite.
Log:
WatchPage: 1
Call postUrlToService [object Object]
Post: [object Object]
Server response: [object Object]
WatchPage: 2
Click + 2
Url: http://exmaple.com/tring=&bmatch=s0-fas-1-4-0408
Call postUrlToService [object Object]
Post: [object Object]
WatchPage: 1 //after response code set watchpage to 1, why?
Server response: [object Object]
Nach Antwortcode Satz Wiedergabeseite auf 1, warum? Wie lege ich die Seite fest, wenn der Benutzer klickt?
EDIT
Es funktioniert. Alle Seiten entsprechen 100, aber auf Link habe ich Zugriff auf 10. Warum?
<pagination total-items="totalItems" items-per-page="itemsPerPage"
ng-model="currentPage" ng-change="pageChanged()"></pagination>
angular.module('PostService', [])
.controller('PageCtrl', function ($scope, AllegroModel) {
var srv = this;
var urlFromForm = '';
var pageNumber = '';
var flag=0;
srv.offers = [];
$scope.totalItems = 0;
$scope.itemsPerPage = 10;
$scope.currentPage = 1;
function postUrlToService(url) {
$scope.dataLoading = true;
$scope.printResult = null;
urlFromForm = url;
initCreate();
console.log('Call postUrlToService ' + url);
PageModel.postUrl(angular.extend({},
{page: pageNumber},url)).then(function (result) {
srv.offers = result.data;
console.log('Server response: ' + srv.offers);
if(flag==0) {
$scope.totalItems = srv.offers.pg;
}
$scope.printResult = srv.offers;
$scope.dataLoading = false;
flag=1;
});
}
function initCreate() {
srv.newUrl = {url: ''};
}
$scope.$watch("currentPage", function(newInput, oldInput) {
if(newInput != oldInput){
//Do your stuff
console.log(newInput);
pageNumber = newInput;
$scope.currentPage = newInput;
postUrlToService(urlFromForm);
}
});
srv.postUrlToService = postUrlToService;
})
.constant('ENDPOINT', 'http://localhost:8080/api/send')
.service('PageModel', function ($http, ENDPOINT) {
var service = this;
function getUrl() {
return ENDPOINT;
}
service.postUrl = function (url) {
console.log("Post: " + url);
return $http.post(getUrl(), url);
};
});
Es funktioniert, wenn if leer ist. 'console.log (newInput)' funktioniert gut. Aber wenn ich meine Funktion 'postUrlToService (urlFromForm) hinzufügen;' Problem ist das gleiche ... – lukassz
Vielleicht, was passiert ist, dass die currentPage und numPerPage Bereiche beide geändert werden, so ein Doppel-Trigger. Kannst du beide Beobachter separat trösten? –
Ok, ich mache das und das funktioniert, aber ich habe ein anderes Problem. Alle Seiten entsprechen 100, aber auf Link habe ich Zugriff auf 10. – lukassz