Проблема здесь связана с тем, что угловой $inject
не может получить прибыль от Typescript require
. Это независимые признаки, они представляют разные понятия.
Угловой [$inject][1]
как встроенный внедрение зависимостей может вводить только то, что уже зарегистрировано. У него нет доступа к объектам Typescript — только к собственной (угловой) фабрике объектов.
Поскольку ошибка говорит: неизвестный поставщик 'AuthenticationProvider', мы должны вызвать:
angular.module('App')
.factory('Authentication', [... its dependencies ...
, (params) => new Authentication(params)]);
Теперь у нас есть готовая аутентификация в angular, и мы можем запросить ее внутри нашего контроллера.
Синтаксис может выглядеть так:
// module with Scope and Controller
module LoginController
{
export interface UIMainScope extends ng.IScope
{
login: (credential: any) => void;
}
export class Controller
{
// constructor, instantiating private members this.$scope ...
constructor($scope: UIMainScope
, $http :ng.IHttpService
, Main: any
, Authentication: any)
...
}
}
// and finally pass it into angular as .controller()
angular.module('App')
.controller('Controller', [
'$scope', '$http', 'Main', 'Authentication',
($scope, $http, Main, Authentication) =>
{
return new LoginController.Controller($scope, $http, Main, Authentication);
}
]);
Наконец: в случаях, когда провайдер Authentication
не получит выгоду от запуска с Angular, мы также можем использовать его. Нам вообще НЕ нужно его регистрировать. Просто вызовите require и получите доступ к его методам... но мы должны пропустить процесс $inject
Angular...
Возможно, это не тот случай, но представьте себе некоторый QueryStringBuilder
..., который мог бы потреблять только переданные параметры в методе Builder.build(...)
person
Radim Köhler
schedule
03.07.2014