Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从url设置页面更改时遇到问题_Angularjs_Angular Ui Router_Odata_Angular Ui - Fatal编程技术网

Angularjs 从url设置页面更改时遇到问题

Angularjs 从url设置页面更改时遇到问题,angularjs,angular-ui-router,odata,angular-ui,Angularjs,Angular Ui Router,Odata,Angular Ui,我正在使用AngularJS和OData控制器构建一个应用程序。我使用Angular ui创建了分页 <div class="table" ng-controller="MyCtrl as ctrl"> <!-- bunch of data to be shown here - The table stuff --> <uib-pagination class="pagination" total-items="ctrl.totalIte

我正在使用AngularJS和OData控制器构建一个应用程序。我使用Angular ui创建了分页

<div class="table" ng-controller="MyCtrl as ctrl">
   <!-- bunch of data to be shown here - The table stuff --> 
    <uib-pagination class="pagination" 
     total-items="ctrl.totalItems"
     items-per-page="10"
     max-size="10"
     rotate="false"
     boundary-links="true"
     ng-model="ctrl.currentPage"
     ng-change="ctrl.pageChanged(ctrl.currentPage)">
    </uib-pagination>
</div>
这是我的控制器:

deniedClaimsApp.controller('DeniedClaimsController', [
    '$scope',
    '$state',
    '$stateParams',
    'DeniedClaimsService',
    'SharedDataService',
    function ($scope, $state, $stateParams, DeniedClaimsService, SharedDataService) {

        var vm = this;
        var claimBK = {};
        vm.claims = {};
        vm.totalItems;        
        vm.numPages = 10;

        vm.currentPage = parseInt($stateParams.page, 10) || 1;

        console.log('Current Page: ' + $stateParams.page);
        activate();

        SharedDataService.registerObserver(activate);

        function activate() {

            $scope.$emit('LOAD');

            vm.isCollapsed = true;
            console.log("Page set to : " + vm.currentPage);

            //vm.currentPage = DeniedClaimsService.getCurrentPage();
            vm.currentPage = $stateParams.page;
            vm.claims = DeniedClaimsService.getClaims(vm.currentPage);
            angular.copy(vm.claims, claimBK);

            resolve();
            $state.go('.', { page: vm.currentPage }, { notify: false });
        }



        function resolve() {
            vm.currentPage = $stateParams.page; //adding this didn't help either
            console.log("Resolve: " + vm.currentPage);
            vm.claims.$promise.then(function (data) {
                vm.totalItems = data.count;
                $scope.$emit('UNLOAD');
            });
        }

       vm.pageChanged = function (page) {

/*
 This is where page is always 1. For some reason, when the page number is changed from the url, it raises the page change event, but the ng-model in uib-pagination doesn't change to the page set in the url. It always stays 1 and changes the page back to the first page
*/
            $scope.$emit('LOAD');

            //vm.currentPage = $stateParams.page;
            console.log("New page: " + vm.currentPage);
            console.log('changing page');
            vm.claims = DeniedClaimsService.pageChanged(vm.currentPage);
            vm.claims.$promise.then(function (data) {

                $scope.$emit('UNLOAD');
            });
            console.log("Changing State to: " + vm.currentPage);
            $state.go('.', { page: vm.currentPage }, { notify: false });
            console.log("Changing pagination: " + vm.currentPage);
            //vm.currentPage = $stateParams.page;

        }   
因此,控制器仅用于更改页面,以及为简洁起见此处未显示的一些其他内容。当我使用“下一步”或“上一步”按钮更改页面时,页面变化良好。但是,当我从url更改页面并从
$stateParams.page
获取页面时,无论我在哪个页面,它都会将页面更改回第一页。我认为这与使用ng change时引发的页面更改事件有关。因此,我将uib分页更改为。这样做确实会在url中将页码设置为
/Claims?page=5
时更改页面,然后我会转到第5页,但它没有更改
uib分页中的
ng模式
。即使表格显示第5页的数据,该模式仍然保持为1。因此,在从url更改为第5页之后,如果我更改单击“下一页”,我将进入第2页,而不是第6页。我做错了什么?为什么该模型不随同一模型值的变化而变化

deniedClaimsApp.controller('DeniedClaimsController', [
    '$scope',
    '$state',
    '$stateParams',
    'DeniedClaimsService',
    'SharedDataService',
    function ($scope, $state, $stateParams, DeniedClaimsService, SharedDataService) {

        var vm = this;
        var claimBK = {};
        vm.claims = {};
        vm.totalItems;        
        vm.numPages = 10;

        vm.currentPage = parseInt($stateParams.page, 10) || 1;

        console.log('Current Page: ' + $stateParams.page);
        activate();

        SharedDataService.registerObserver(activate);

        function activate() {

            $scope.$emit('LOAD');

            vm.isCollapsed = true;
            console.log("Page set to : " + vm.currentPage);

            //vm.currentPage = DeniedClaimsService.getCurrentPage();
            vm.currentPage = $stateParams.page;
            vm.claims = DeniedClaimsService.getClaims(vm.currentPage);
            angular.copy(vm.claims, claimBK);

            resolve();
            $state.go('.', { page: vm.currentPage }, { notify: false });
        }



        function resolve() {
            vm.currentPage = $stateParams.page; //adding this didn't help either
            console.log("Resolve: " + vm.currentPage);
            vm.claims.$promise.then(function (data) {
                vm.totalItems = data.count;
                $scope.$emit('UNLOAD');
            });
        }

       vm.pageChanged = function (page) {

/*
 This is where page is always 1. For some reason, when the page number is changed from the url, it raises the page change event, but the ng-model in uib-pagination doesn't change to the page set in the url. It always stays 1 and changes the page back to the first page
*/
            $scope.$emit('LOAD');

            //vm.currentPage = $stateParams.page;
            console.log("New page: " + vm.currentPage);
            console.log('changing page');
            vm.claims = DeniedClaimsService.pageChanged(vm.currentPage);
            vm.claims.$promise.then(function (data) {

                $scope.$emit('UNLOAD');
            });
            console.log("Changing State to: " + vm.currentPage);
            $state.go('.', { page: vm.currentPage }, { notify: false });
            console.log("Changing pagination: " + vm.currentPage);
            //vm.currentPage = $stateParams.page;

        }