2017-04-07 81 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