【问题标题】:Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- Pages错误:[$injector:unpr] 未知提供者:$scopeProvider <- $scope <- Pages
【发布时间】:2016-05-09 08:55:04
【问题描述】:

我一直在努力将分页包含在 angular 中并遇到此错误 Error: [$injector:unpr] Unknown provider: $scopeProvider

是否可以在 Pages.js 的 Controllers.js 中引用对我的 API 的 $http 调用?

Pages.js

angular.module('pages', []);

defaultPage.factory('Pages', function ($http, $scope) {
    return {
        getPage: function (pageNum) {
            $http.get('https://api.github.com/repos/npm/npm/issues', {
                headers: {
                    'Content-type': 'application/json'
                }
            }).success(function (data) {
                $scope.ctrl.info + pageNum;
            });
        }
    }
});

Controllers.js

/defaultPage = angular.module('DefaultPage', ['ngAnimate', 'ui.bootstrap']);/

// 为默认页面和依赖项声明我的 DefaultController

defaultPage.controller('DefaultController', ['$scope', '$http', 'Pages', function ($scope, $http, Pages) { $scope.data = {};

var url = 'https://api.github.com/repos/npm/npm/issues';

$http.get(url, {
    headers: {
        'Content-type': 'application/json'
    }
}).success(function (data) {
    $scope.ctrl.info = data;

    $scope.currentPage = 0;
    $scope.pageSize = 10;

    $scope.numberOfPages = function () {
        return 25;
    };

    $scope.data = Pages.getPage($scope.currentPage);
    $scope.getPage = function (pageNum) {
        $scope.data = Pages.getPage(pageNum);
    }

});

}]); //defaultPage ctrl end

// 为我的问题页面和参数声明我的 IssuesController

defaultPage.controller('IssuesController', ['$scope', '$http', '$routeParams', function ($scope, $http, $routeParams) { $http.get('https://api.github.com/repos/npm/npm/issues') .success(函数(数据){ $scope.ctrl = 数据; $scope.whichIssue = $routeParams.issueId;

        //Issue page previous issue button 
        if ($routeParams.issueId > 0) {
            $scope.prevIssue = Number($routeParams.issueId) - 1;
        } else {
            $scope.prevIssue = $scope.ctrl.length - 1;
        }

        //Issue page next issue button
        if ($routeParams.issueId < $scope.ctrl.length - 1) {
            $scope.nextIssue = Number($routeParams.issueId) + 1;
        } else {
            $scope.nextIssue = 0;
        }
    });

}]); //结束

apps.js

var defaultPage = angular.module('GithubIssues', [
     'ngRoute',
     /*'DefaultPage',*/
     'pages'

 ]);

 defaultPage.config(['$routeProvider', function ($routeProvider) {
     $routeProvider.
     when('/default', {
         templateUrl: 'partials/default.html',
         controller: 'DefaultController'
     }).
     when('/issues/:issueId', {
         templateUrl: 'partials/issues.html',
         controller: 'IssuesController'
     }).
     otherwise({
         redirectTo: '/default'
     });
}]);

filters.js

// filter for pages pagination
defaultPage.filter('startFrom', function () {
    return function (input, start) {
        start = +start;
        return input.slice(start);
    }
});

【问题讨论】:

  • 我不认为 $scope 在工厂可用

标签: angularjs service pagination factory


【解决方案1】:

$scope 在工厂或服务中不可用,仅在控制器中可用

即使是,$scope.ctrl.info + pageNum; 也是无效的声明。

返回$http 返回的请求承诺,并在then() 回调中更新控制器本身的范围

getPage: function (pageNum) {
        return    $http(.....

【讨论】:

  • 所以我应该将 .then() 回调放在 factory 或 controller.js 中吗? @charlietfl
  • 可以根据您对数据的处理方式在两者中放入一个...但肯定需要在控制器中放入一个
  • 我想做一些类似于jsfiddle.net/ef0d9zuk/1 的事情,唯一的区别是我从 API 中检索 JSON 数据。我想每页加载 25 个项目,并且最多有 25 页(第 1 页到第 25 页)。 '$scope 和 $http' 都在我的 controller.js 中用于检索 JSON 数据,我不能将 $scope 与工厂一起使用,那么如何在工厂中使用 .then() 呢? @charlietfl
  • Pages.getPage().then(function(resp){ $scope.someThing = resp.data})
猜你喜欢
  • 2015-08-12
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 2015-08-27
  • 2016-08-17
  • 1970-01-01
相关资源
最近更新 更多