【问题标题】:AngularJS: Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- productServiceAngularJS:错误:[$injector:unpr] 未知提供者:$scopeProvider <- $scope <- productService
【发布时间】:2017-04-03 03:47:47
【问题描述】:

我创建了一个 Service 以使用 Web API 控制器方法从数据库中提取数据。但是每当我注入服务并在控制器中调用服务方法时,它都会显示以下错误:

错误:[$injector:unpr] 未知提供者:$scopeProvider http://errors.angularjs.org/1.5.8/$injector/unpr?p0=copeProvider%20%3C-%20%24scope%20%3C-%20productService

尝试了很多,但无法理解错误的真正所在!

这是我的 AngularJS 模块代码:

var app = angular.module("Demo", ["ngRoute"])

这是我的 RouteConfig

app.config(function($routeProvider, $locationProvider) {
    $routeProvider.when("/products/details/:id",
        {
            templateUrl: "Temaplates/details.html",
            controller: "productDetailsController"
        })
 })

这是我的服务:

app.factory('productService',
    function($scope, $http, $routeParams) {
        return {
            getDataById: function() {
                alert("Hello I am invoked");
                $http({
                        method: "GET",
                        url: "http://localhost:43618/api/Products",
                        params: { id: $routeParams.id }
                    })
                    .then(function(response) {
                        $scope.product = response.data;
                    })
            }
        };
    });

这是我的 AngularJS 控制器

app.controller("productDetailsController", function ($scope, $http, $routeParams, $location, productService) {
     $scope.message = "Product Details";
     $scope.product = productService.getDataById();

    })

到底哪里错了!!请帮忙!!

【问题讨论】:

  • $routeProvider.when("/products/details/:id", 不像 $routeProvider..when("/products/details/:id",
  • 哈哈!!这实际上不是问题!这只是输入错误:)
  • "/products/details/"+id

标签: javascript angularjs


【解决方案1】:

有几件事我想记下来

  1. 你不能在服务内部注入$scope
  2. 您应该从服务方法返回$http.getpromise 以获取控制器内部的数据。
  3. 内部控制器使用.then 从服务函数中检索数据。

工厂

app.factory('productService',
  function($http, $routeParams) {
    return {
      getDataById: function() {
            //return proimise from here
        return $http.get("http://localhost:43618/api/Products", {
            params: { id: $routeParams.id }
        });
      }
    };
});

控制器

app.controller("productDetailsController", function($scope, $http, $routeParams, $location, productService) {
    $scope.message = "Product Details";
    productService.getDataById().then(function(response){
      $scope.product = response.data;
    }, function(error){
      console.log("Error occured ", error);
    });
});

【讨论】:

  • @TanvirArjel 谢谢,很高兴知道:)
  • @Pankaj_Parkar,显示产品未定义!错误!!
  • @TanvirArjel 有一个额外的括号,只需检查更新
  • 终于成功了!!谢谢你的努力..你能告诉我额外的括号到底在哪里吗!!
  • 可以查看区别here
【解决方案2】:

您不能将 $scope 注入服务,因为特定范围仅在指令和组件中可用。你只能使用 $rootScope

这实际上是有道理的,因为服务是单例的。当注入多个控制器时,应该使用哪个 $scope ?另一方面, $rootScope 也是一个单例,因此可以工作。

【讨论】:

  • 谢谢!!如果您根据输出重写/更改我的代码并作为答案提交,那就太好了!
  • 我愿意,但我在用手机。我想我会给你一个答案,这样你就可以开始了。
猜你喜欢
  • 2015-08-12
  • 2016-05-09
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
相关资源
最近更新 更多