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();
});