2016-05-02 2 views
1

Ich möchte einen Controller zum Service injizieren.AngularJS: Wie kann man den Controller in Betrieb nehmen?

Ich verwende AngularJs und Laravel und glup-ng-Annotat.

/* DialogController*/ 
    (function(){ 
     "use strict"; 

     angular.module("music.controllers").controller('DialogController', function($scope, $mdDialog){ 
      $scope.hide = function() { 
       $mdDialog.hide(); 
      }; 
      $scope.cancel = function() { 
       $mdDialog.cancel(); 
      }; 
      $scope.answer = function(answer) { 
       $mdDialog.hide(answer); 
      }; 
     }); 
    })(); 

Und das ist Service-

/* Service */ 
(function(){ 
    "use strict"; 

    angular.module("music.services").factory('DialogService', function($mdDialog, DialogController){ 

     return { 
      fromTemplate: function(template, $scope) { 

       var options = { 
        controller: DialogController, 
        templateUrl: template 
       }; 

       if ($scope){ 
        options.scope = $scope.$new(); 
       } 

       return $mdDialog.show(options); 
      }, 

      alert: function(title, content){ 
       $mdDialog.show(
        $mdDialog.alert() 
        .title(title) 
        .content(content) 
        .ok('Ok') 
        ); 
      } 
     }; 
    }); 
})(); 

Ich habe diesen Fehler

Fehler: [$ Injektor: UNPR] Unbekannter Anbieter: DialogControllerProvider < - DialogController < - DialogService

+1

Werk/Services können ihre eigenen Controller haben! Sie können keine Controller zu Services/Factory hinzufügen/hinzufügen! –

+5

Sie versuchen, den Wagen vor das Pferd zu stellen. – JLRishe

+0

Schauen Sie sich diesen js Code an, Zeile 82 und 108, http://codepen.io/kyleledbetter/pen/gbQOaV –

Antwort

1

Ein Service kann in eine Steuerung eingespeist werden, aber umgekehrt ist das nicht möglich . Die Abhängigkeitsinjektion in AngularJS unterstützt die Injektion von Services in Controller.

1

Der Controller sollte vom Service $mdDialog injiziert werden. Setzen Sie den Namen in Anführungszeichen, sodass der Service $mdDialog eine Zeichenfolge anstelle einer Referenz erhält.

(function(){ 
    "use strict"; 

    angular.module("music.services") 
     .factory('DialogService', function($mdDialog ̶,̶D̶i̶a̶l̶o̶g̶C̶o̶n̶t̶r̶o̶l̶l̶e̶r̶){ 

     return { 
      fromTemplate: function(template, $scope) { 

       var options = { 
        //REPLACE this 
        //controller: DialogController, 
        //WITH this 
        controller: "DialogController", 
        templateUrl: template 
       }; 

       if ($scope){ 
        options.scope = $scope.$new(); 
       } 

       return $mdDialog.show(options); 
      }, 

      alert: function(title, content){ 
       $mdDialog.show(
        $mdDialog.alert() 
        .title(title) 
        .content(content) 
        .ok('Ok') 
        ); 
      } 
     }; 
    }); 
})(); 

In diesem Fall wird das Objekt options an die $mdDialog Dienst übergeben, die die Injektion von der Steuerung der Fall ist.

Unter der Haube verwendet der Service $mdDialog den $controller Service, um den spezifizierten Controller zu injizieren.