簡體   English   中英

嘗試依賴向AngularJs中的控制器注入服務時出現未知的提供程序錯誤

[英]Unknown provider error when trying to dependency inject a service to a controller in AngularJs

我是Angular的新手,正在嘗試進行基本的依賴項注入來掌握它。 在此示例中,我試圖將服務注入到控制器,並且遇到以下錯誤。

Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- testInjection

柱塞

HTML:

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.0-rc.1/angular.js" data-semver="1.4.0-rc.1"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <p>Hello {{name}}!</p>
  </body>

</html>

js:

var app = angular.module('plunker', []);

app.controller('MainCtrl', ['testInjection',function($scope) {
  $scope.name = 'World';
}]).factory('testInjection', ['$scope', function($scope) {

  }]);

你應該做這個 :

app.factory('testInjection', ['$scope', function($scope) {

 }]);

app.controller('MainCtrl', ['$scope', 'testInjection',function($scope, testInjection) {
  $scope.name = 'World';
}]);

最好事先定義您的服務(工廠)。 這里的問題是,即使將范圍注入服務中,也必須再次將其注入控制器中。

正如Nikos所說,請勿嘗試將范圍對象注入服務或工廠。

對於我的有角項目,我為每個控制器/服務/工廠/指令創建一個新文件。 這些文件的設置如下所示:

一個工廠:

(function () {
    'use strict';
    angular.module('MyModule')
           .factory('someService', function () {
               var service = {
                   myFunction: function () { 
                       return "Hello";
                   }
               };

               return service;
           });
})();

控制器:

(function () {
    'use strict';
    angular.module('MyModule')
           .controller('someCtrl', ['$scope', 'someService', function ($scope, someService) {
               $scope.name = "World";
               $scope.message = someService.myFunction() + " " + $scope.name;
           }]);
})();

當心,以上語法僅檢索現有模塊。 請參見“創建與檢索”下的角度模塊 我有另一個文件,該文件使用相同的語法創建模塊,但帶有用於導入其他模塊的括號。

您應該看一下有角度的文檔,以獲取更多信息和示例。

在這里修改了你的pl子。 請檢查定義服務的方式和注入方式。 即使在控制器之后定義它也沒關系。 同樣,該錯誤是因為工廠函數未返回任何內容。 也修復了該問題。

您的代碼應如下所示:

var app = angular.module('plunker', []);

app.controller('MainCtrl'['$scope','testInjection',function($scope,testInjectio)
 {
  $scope.name = testInjection;
}]).factory('testInjection', function() {
       return "ABC"
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM