0

Я хочу ввести самозанятое сообщение CalculatorService.ts в самописном контроллере AngularJS с именем StringCalculatorController.ts.Проблемы с инжектором обслуживания в контроллере AngularJS, написанные на языке TypeScript

Мой 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) 

Im начиная сценарий, следуя 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> 

Может кто-нибудь, пожалуйста, помогите мне?

ответ

2

Вы определяете свой угловой модуль AngularCalculatorModule дважды, то есть у вас есть линия

var app = angular.module("AngularCalculatorModule", []); 

в оба ваших машинопись файлов.

Поместите создание углового модуля angular.module("AngularCalculatorModule", []); в отдельный файл, например. вы также можете поместить в него конфигурацию или другую информацию о инициализации. Затем включите этот файл сразу после включения angular.js.

Впоследствии просто используйте angular.module("AngularCalculatorModule").controller(...) (учтите недостающие [] = массив зависимостей модулей).

+0

Это работает! Оно работает! Спасибо! –

Смежные вопросы