当使用$ routeProvider切换视图时,Angularjs ajax被称为多个时间

时间:2016-02-11 18:50:05

标签: angularjs ajax route-provider

当我从导航切换视图时,我正在多次调用同一个ajax函数调用。假设我在Residents.html上,ajax只会触发一次(通常)。 POST localhost:64752 / api / Residents / GetResidents

现在,如果我导航到Home.html并导航回每个导航的Residnets.html,则会触发两次触发器。 本地主机:64752 / API /居民/ GetResidents 本地主机:64752 / API /居民/ GetResidents

现在,如果我再次导航到Home.html并导航回Residents.html,它会被触发3次。 本地主机:64752 / API /居民/ GetResidents 本地主机:64752 / API /居民/ GetResidents 本地主机:64752 / API /居民/ GetResidents

您在页面之间导航的次数越多,呼叫次数就越多。 视图或.html页面不包含Controller ng-controller,因此很清楚。

所有的ajax调用都是为控制器而来的,我有一些我创建的使用ajax调用的指令。

// app.js var app = angular.module(“apartment”,[“ngRoute”,“ngResource”,“apartment.homeController”,“apartment.apartmentsController”,“apartment.residentsController”,“ngResource”]);

// Config...
app.config(function ($routeProvider) { 

    $routeProvider
       .when("/", {
           templateUrl: "View/home.html",
           controller: "homeController",
       })
        .when("/residents", {
            templateUrl: "View/residents.html",
            controller: "residentsController"
        })
        .when("/rooms", {
            templateUrl: "View/rooms.html",
            controller: "apartmentsController"
        })
        .otherwise({
            template: "does not exists"
        });
});

//居民控制器 (function(){

'use strict';

var app = angular.module('apartment.residentsController', ['ngResource', 'appartment.services', 'ngMaterial']);

app.controller('residentsController', function ($scope, $resource, $http, apartmentService) {

    $scope.getResidents = function () {            

        var req = {
                method: 'POST',
                url: url + '/GetResidents',
                header: { 'Content-Type': 'application/json' },
                data: JSON.stringify({
                    page: $scope.page,
                    pageSize: $scope.pageSize,
                    sort: $scope.sort,
                    filter: $scope.filter,
                    orderby: $scope.orderby
                })
        };

        $scope.loading = true;
        $http(req).then(
            function (data) {
                $scope.showClientTable = true;
                $scope.residents = data.data.result;                    
                $scope.totalPages = data.data.pages;
                $scope.loading = false;
            },
            function (data) {
                console.log(data.error);
                $scope.loading = false;
            }
        );
    }

});//end controller

}()); //结束附件

1 个答案:

答案 0 :(得分:0)

我发现了问题。我使用了许多指令来进行ajax调用。由于某些奇怪的原因,这会导致在ajax中通过$ routesprovider在页面之间来回导航时发生多个ajax调用。所以我从指令中删除了ajax调用并将它们放在函数中。