用 TypeScript 编写的 AngularJS 控制器中的服务注入问题
Problems with service injection in a AngularJS controller written in TypeScript
我想在名称为StringCalculatorController.ts
.
的自写AngularJS控制器中注入自写服务CalculatorService.ts
我的 CalculatorService 看起来像这样:
/// <reference path="../typescript_definitions/angular.d.ts" />
module CalculatorModule {
export class CalculatorService {
// implementation stuff....
}
}
var app = angular.module("AngularCalculatorModule", []);
app.service("calculatorService", CalculatorModule.CalculatorService);
StringCalculatorController 应该使用 CalculatorService 作为依赖:
/// <reference path="../typescript_definitions/angular.d.ts" />
/// <reference path="CalculatorService.ts" />
module CalculatorModule {
export class StringCalculatorController {
private calculatorService:CalculatorModule.CalculatorService;
static $inject = ['calculatorService'];
constructor(calculatorService) {
console.log(calculatorService);
}
}
}
var app = angular.module("AngularCalculatorModule", []);
app.controller("StringCalculatorController",CalculatorModule.StringCalculatorController);
这不起作用。它给了我以下错误信息:
Error: [$injector:unpr] Unknown provider: calculatorServiceProvider <- calculatorService <- StringCalculatorController
http://errors.angularjs.org/1.4.8/$injector/unpr?p0=calculatorServiceProvider%20%3C-%20calculatorService%20%3C-%20StringCalculatorController
at angular.js:68
at angular.js:4334
at Object.getService [as get] (angular.js:4482)
at angular.js:4339
at getService (angular.js:4482)
at Object.invoke (angular.js:4514)
at extend.instance (angular.js:9182)
at nodeLinkFn (angular.js:8299)
at compositeLinkFn (angular.js:7731)
at compositeLinkFn (angular.js:7734)
我按照 index.html
:
启动脚本
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="bower_components/angular/angular.js"></script>
<script src="src/CalculatorService.js"></script>
<script src="src/StringCalculatorController.js"></script>
</head>
<body ng-app="AngularCalculatorModule">
<div ng-controller="StringCalculatorController">
</div>
</body>
</html>
有人可以帮我吗?
您正在定义 angular 模块 AngularCalculatorModule
两次,即您有行
var app = angular.module("AngularCalculatorModule", []);
在你的两个打字稿文件中。
将 angular 模块 angular.module("AngularCalculatorModule", []);
的创建放在一个单独的文件中,例如您还可以在那里放置配置或其他初始化内容。然后在 angular.js
包含之后立即包含此文件。
之后只需使用 angular.module("AngularCalculatorModule").controller(...)
(注意缺少 []
= 模块依赖项数组)。
我想在名称为StringCalculatorController.ts
.
CalculatorService.ts
我的 CalculatorService 看起来像这样:
/// <reference path="../typescript_definitions/angular.d.ts" />
module CalculatorModule {
export class CalculatorService {
// implementation stuff....
}
}
var app = angular.module("AngularCalculatorModule", []);
app.service("calculatorService", CalculatorModule.CalculatorService);
StringCalculatorController 应该使用 CalculatorService 作为依赖:
/// <reference path="../typescript_definitions/angular.d.ts" />
/// <reference path="CalculatorService.ts" />
module CalculatorModule {
export class StringCalculatorController {
private calculatorService:CalculatorModule.CalculatorService;
static $inject = ['calculatorService'];
constructor(calculatorService) {
console.log(calculatorService);
}
}
}
var app = angular.module("AngularCalculatorModule", []);
app.controller("StringCalculatorController",CalculatorModule.StringCalculatorController);
这不起作用。它给了我以下错误信息:
Error: [$injector:unpr] Unknown provider: calculatorServiceProvider <- calculatorService <- StringCalculatorController
http://errors.angularjs.org/1.4.8/$injector/unpr?p0=calculatorServiceProvider%20%3C-%20calculatorService%20%3C-%20StringCalculatorController
at angular.js:68
at angular.js:4334
at Object.getService [as get] (angular.js:4482)
at angular.js:4339
at getService (angular.js:4482)
at Object.invoke (angular.js:4514)
at extend.instance (angular.js:9182)
at nodeLinkFn (angular.js:8299)
at compositeLinkFn (angular.js:7731)
at compositeLinkFn (angular.js:7734)
我按照 index.html
:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="bower_components/angular/angular.js"></script>
<script src="src/CalculatorService.js"></script>
<script src="src/StringCalculatorController.js"></script>
</head>
<body ng-app="AngularCalculatorModule">
<div ng-controller="StringCalculatorController">
</div>
</body>
</html>
有人可以帮我吗?
您正在定义 angular 模块 AngularCalculatorModule
两次,即您有行
var app = angular.module("AngularCalculatorModule", []);
在你的两个打字稿文件中。
将 angular 模块 angular.module("AngularCalculatorModule", []);
的创建放在一个单独的文件中,例如您还可以在那里放置配置或其他初始化内容。然后在 angular.js
包含之后立即包含此文件。
之后只需使用 angular.module("AngularCalculatorModule").controller(...)
(注意缺少 []
= 模块依赖项数组)。