2017-06-09 6 views
-1

Ich versuche, John Papas eckige Architektur zu implementieren, aber ich kann nicht scheinen, es zur Arbeit zu bringen. Ich habe das Gefühl, dass ich etwas Grundlegendes über die Funktionsweise von Vererbung verpasse.Stumped mit eckigen Modulvererbung

Ich versuche nur auf eine Factory-Methode =, test.ping, die im Basis-App-Modul lebt, aus dem Feature-Modul foo.module.js. Wenn ich versuche, um die Funktion aufzurufen, erhalte ich einen Fehler in der Konsole: Reference: ‚test‘ nicht definiert ist

//app.js 
(function() { 

angular.module("app", ['app.foo']) 
    .factory('test', [function() { 

     var service = { 
      ping: ping 
     }; 
     return service 
     function ping() { 
      alert('PING Service method called.'); 
     } 
    }]) 
})(); 

//foo.module.js 
(function() { 

angular.module('app.foo', []); 

})(); 

//foo.js 
(function() { 

angular 
    .module('app.foo') 
    .controller('Foo', Foo); 

Foo.$inject = []; 

function Foo() { 
    var vm = this; 
    alert('Foo loaded'); //the alert is working 

    vm.ping = function() { 
     alert('Ping button clicked.'); //the alert is working 
     test.ping(); //this throws console error 
    } 
} 
})(); 

//html 
<body data-ng-controller="Foo as fooCtrl"> 
    <button data-ng-click="fooCtrl.ping()">PING</button> 

Antwort

2

Sie haben vergessen test Service in Dependency Injection hinzuzufügen. dies

Foo.$inject = ['test']; 

Und auch

function Foo() { 

dies

Foo.$inject = []; 

Änderung

function Foo(test) { 
+1

Das war es! Macht Sinn ... genauso wie Sie eckige $ Dienste hinzufügen müssen, die Sie verwenden möchten. Ich wusste, dass es etwas Einfaches war ... sich in allen Schichten verloren hat, aber es wird sich lohnen, wenn alles fertig ist und funktioniert. –