2017-04-07 11 views
0

これらの質問はたくさんあることは知っていますが、私は具体的です。私はAngularJSでTypescriptを使用しています。私はmultimediaControllerからmultimediaAlbumControllerに変数を渡したいと思います。 "[$ injector:unpr]不明なプロバイダ:multimediaControllerProvider < - multimediaController < - multimediaAlbumController"。どうすればそれを防ぐことができますか?AngularJS Unknown provider - コントローラの場合

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を宣言している見ることができるように。バグはどこにありますか? :/

+0

'multimediaController'があなたのモジュールが登録されていないようですので、そこ – devqon

+0

を注入するものを知っていませんが、私はそう、コントローラにコントローラを注入することができないことを発見しました私はそれを間違っている:(任意のアイデア、どのように私はこの変数を得ることができますか? – qwerty1234567

答えて

2

injectコントローラーを別のコントローラーにするのではなく、service\factoryを使用する必要があります。

scopemutlimediaControllerにするには、$controllerのangularjsを注入する必要があります。

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

をしかし、私は、共通のデータにアクセスするためのサービス/工場を作ることをお勧め: あなたは、IKEそれを行うことができます。

などは:

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

うーん..あなたがそれを書いたように私は取得しています 'MultimediaController'という名前のコントローラは登録されていません – qwerty1234567

+0

とにかく、それは大丈夫です。私は盗難防止コントローラからそのデータにアクセスすることができます(私はサービスを持っていますが、私はデータベースからデータを再度撮影してはならないと思っていました)。 – qwerty1234567

+0

私は\ 'export class MultimediaController { //コントローラコード } app.controller( 'MultimediaControllerl'、MultimediaControllerl); 'のようなntrollerですが、私はあなたのサービスを利用することを提案します。 – anoop

関連する問題