[英]Unknown provider Error when trying to inject dependency on Angular controller
[英]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.