2016-11-19 87 views
4

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

Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- productService 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(); 

    }) 

在哪里其实是错误的!任何帮助请!

+0

$ routeProvider.when( “/产品/信息/:ID”, 并不像$ routeProvider..when(”/products/details /:id“, –

+0

哈哈!!这实际上不是问题!!这只是输入错误:) – TanvirArjel

+0

”/ products/details /“+ id –

回答

6

有几件事情,我想记下

  1. 你不能注入$scope内部服务
  2. 您应该返回从服务方法$http.get承诺进去控制器数据。
  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); 
    }); 
}); 
+0

太棒了!非常感谢清晰的插图! – TanvirArjel

+0

@TanvirArjel谢谢,很高兴知道:) –

+0

@Pankaj_Parkar,它显示的产品没有定义!错误!! – TanvirArjel

2

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

这实际上是有道理的,因为服务是单身人士。当注入到多个控制器时,哪个$ scope应该角度使用呢? $ rootScope另一方面也是一个单身人士,所以工程。

+0

谢谢!如果您根据输出重写/更改我的代码并将其作为答案提交,那将非常棒! – TanvirArjel

+0

我会,但我在我的手机上。我想给你一个答案,所以你可以走了。 – Robba

相关问题