【问题标题】:unknown provider in my app我的应用程序中的未知提供商
【发布时间】:2018-12-14 15:18:27
【问题描述】:

我正在尝试将 HTTP 请求放入服务文件中,以便在多个控制器中使用此功能,但出现以下错误,我尝试了多种解决方案但仍然出现此错误

这是我的 controller.js

.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/LatestMovies', {
templateUrl: 'LatestMovies/LatestMovies.html',
controller: 'LatestMoviesCtrl'

});
}])


.controller('LatestMoviesCtrl', 
['myServices','$scope',function(myServices,$scope) {



$scope.movies = myServices.getLatestMovies();
console.log($scope.movies ,'ggg')
}
]);

这是我的 services.js

   angular.module('myApp', ['ngRoute'])

 .factory('myServices', function ($http) {
return {
    getLatestMovies : function () {
            var service ={
                movies : '',
                details : []
            }
            var base = 'http://api.themoviedb.org/3';
            var service = '/movie/popular?page=1&language=en- 
             US&api_key=';
            var apiKey = '';
            var callback = 'JSON_CALLBACK';
            var url =base + service + apiKey + '&callback=' + callback;
            //$scope.results = 'requesting...';

            $http.jsonp(url).then(function(result, status) {
                //$scope.results = JSON.stringify(data);
                service.movies = result.data;
                angular.forEach(result.data.results, function (value, 
                index) {
                    service.details.push(value);
                });

            },function(result, status) {
                service.movies = 'Maybe you missed your API key?' + 
       JSON.stringify(result.data);
            });

            return service.movies;
        }
    }

    });

错误

angular.js:14199 错误:[$injector:unpr] 未知提供者:myServicesProvider http://errors.angularjs.org/1.5.11/$injector/unpr?p0=myServicesProvider%20%3C-%20myServices%20%3C-%20LatestMoviesCtrl 在http://localhost:8000/bower_components/angular/angular.js:68:12http://localhost:8000/bower_components/angular/angular.js:4563:19 在 Object.getService [as get] (http://localhost:8000/bower_components/angular/angular.js:4716:32) 在http://localhost:8000/bower_components/angular/angular.js:4568:45 在 getService (http://localhost:8000/bower_components/angular/angular.js:4716:32) 在 injectionArgs (http://localhost:8000/bower_components/angular/angular.js:4741:58) 在 Object.instantiate (http://localhost:8000/bower_components/angular/angular.js:4783:18) 在 $controller

【问题讨论】:

    标签: javascript angularjs node.js


    【解决方案1】:

    你需要注入 $http 模块来发送 api 调用

     .factory('myServices', ['$http',function ($http) {
    return {
        getLatestMovies : function () {
                var service ={
                    movies : '',
                    details : []
                }
                var base = 'http://api.themoviedb.org/3';
                var service = '/movie/popular?page=1&language=en- 
                 US&api_key=';
                var apiKey = '';
                var callback = 'JSON_CALLBACK';
                var url =base + service + apiKey + '&callback=' + callback;
                //$scope.results = 'requesting...';
    
                $http.jsonp(url).then(function(result, status) {
                    //$scope.results = JSON.stringify(data);
                    service.movies = result.data;
                    angular.forEach(result.data.results, function (value, 
                    index) {
                        service.details.push(value);
                    });
    
                },function(result, status) {
                    service.movies = 'Maybe you missed your API key?' + 
           JSON.stringify(result.data);
                });
    
                return service.movies;
            }
        }
    
        }]);
    

    【讨论】:

    • OP已经在他的服务中注入了$http,你只使用了DI的Array Inline Annotation
    【解决方案2】:

    您似乎已经创建了两次 myApp 模块,首先是在 services.js 中,然后是在 controller.js 中。所以基本上发生的事情是

    1. 首先加载services.js 时,它会创建myApp 角度模块和myServices 服务。
    2. controllers.js 文件加载时,在文件的开头,您使用angular.module('myApp', ['ngRoute']) 重新创建了myApp 模块。它重新创建一个新的myApp 模块并向其注册configLatestMoviesCtrl
    3. 因此 myServices 依赖项不可用。

    在注册更多文件时解决问题。

    angular.module('myApp')
    .config(...)
    .controller('LatestMoviesCtrl', .... )
    

    【讨论】:

    • 你的意思是我应该从 myservice.js 中删除 angular.module('myApp', ['ngRoute']) 并将其保留在我的控制器中
    • 删除angular.module('myApp', ['ngRoute']) 部分完全取决于您加载js文件的顺序?你先加载services.js 了吗?
    • 控制器先加载并调用服务文件
    • 我在问html页面上的js引用序列?如果首先引用services.js,则在页面controllers.js 上使用angular.module('myApp')
    • 我有一个空白页
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多