AngularJS Неизвестный поставщик - для контроллеров

Я знаю, что таких вопросов много, но мой конкретный. Я использую Typescript с AngularJS. Я хочу получить переменную из multimediaController в multimediaAlbumController. Я получаю сообщение "[$injector:unpr] Неизвестный поставщик: multimediaControllerProvider <- multimediaController <- multimediaAlbumController". Как я могу предотвратить это?

MultimediaAlbumController

export class MultimediaAlbumController{
    $scope;
    albums        : AlbumDto[];
    $popupManager;
    $state;
    $element;
    mutlimediaController;
    static $inject = ['$injector', '$scope', '$stateParams', '$state', '$popupManager', '$element','multimediaController']
    constructor(
            $injector         : ng.auto.IInjectorService,
            $scope,
            $stateParams,
            $state,
            $popupManager,
            $element,
            mutlimediaController: MultimediaController
        ) {
        super();
        $injector.invoke(this.init, this, {$scope});
        this.$scope = $scope;
        this.$element = $element;
        this.$state = $state;
        this.$popupManager = $popupManager;
        this.mutlimediaController = MultimediaController;
        this.albums = mutlimediaController.albums;
}

Как вы можете видеть, я объявил multimediaController, даже напишите его в $inject. Так где же ошибка?:/

1 ответ

Решение

Вы не должны inject один контроллер в другой, скорее вы должны использовать service\factory,

Однако, чтобы получить scope из mutlimediaControllerнужно вводить $controller служба ангулярс. Вы можете сделать это, Айк:

static $inject = ['$injector', '$scope', '$stateParams', '$state', '$popupManager', '$element','$controller']

    constructor(
            $injector: ng.auto.IInjectorService,
            $scope,
            $stateParams,
            $state,
            $popupManager,
            $element,
            $controller
        ) {
        super();
        $injector.invoke(this.init, this, {$scope});
        this.$scope = $scope;
        this.$element = $element;
        this.$state = $state;
        this.$popupManager = $popupManager;
        var mutlimediaController  = $controller('MultimediaController', {this.$scope: $scope});
        mutlimediaController.someFunction();// some function of your MultimediaController
        this.albums = mutlimediaController.albums;
}

Но я бы предложил сделать сервис / фабрику для доступа к общим данным.

Подобно:

myApp.service('myService', function() {
    var text = '';
    this.getValue = function () { 
      return text;
    }
    this.setValue = function (data) { 
     return text = data;
    } 
});

//Inside controller    
myApp.controller('MyCtrl', function MyCtrl($scope, myService) {
myService.setValue ("data to service");
$scope.message = myService.getValue();
});
Другие вопросы по тегам