2017-04-07 48 views
0

我知道這裏有很多這樣的問題,但我是具體的。我正在使用AngularJS的Typescript。我想從multimediaController變成multimediaAlbumController。我得到了「[$ injector:unpr]未知提供者:multimediaControllerProvider < - multimediaController < - multimediaAlbumController」。我如何防止它?AngularJS未知的提供商 - 對於控制器

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

但是我發現我不能注入Controller來控制,所以我做錯了:(任何想法,我怎麼能得到這個變量? – qwerty1234567

回答

2

你不應該inject一個控制器到另一個,而你應該使用service\factory

但是要獲得scopemutlimediaController,您需要注入angularjs的$controller服務。 你可以IKE做到這一點:

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

嗯..做了像你寫它,我得到控制器名稱'MultimediaController'未註冊 – qwerty1234567

+0

無論如何,沒關係。我可以從antoher控制器訪問這些數據(我有服務,但我認爲我不應該再次從數據庫中發射數據) – qwerty1234567

+0

我希望\假設你已經註冊了你的公司像'出口類MultimediaController { //控制器代碼 } app.controller('MultimediaControllerl',MultimediaControllerl);'但我會建議利用您的服務。 – anoop