Während der Erstellung der Dashboard-Anwendung kam ich zu der Situation, wo ich AngularJS
Controller und Service in einem haben muss.AngularJS Controller als Service oder Service als Controller
Am main (1.) Seite Ich habe mainController
(nichts mit Layout) und auch layoutController
, die mit den Tasten mit Methoden binded ist loadLayoutFromAPI()
und saveLayoutToAPI()
.
Jetzt gibt es nur sekundär (2nd) secondController
und nicht layoutController
. Ich muss Methoden von der layoutController
direkt von secondController
verwenden und ich bevorzuge es nicht ng-controller
Direktive in den HTML-Code (stattdessen setzen Sie es auf secondController
durch Abhängigkeit-Injektion wie Service).
Mainpage (1.):
<div ng-controller="mainController">
<!-- some other code -->
<div ng-controller="layoutController as ctrl">
<a href="#" ng-click="ctrl.loadLayoutFromAPI()">Load</a>
<a href="#" ng-click="ctrl.saveLayoutToAPI()">Save</a>
</div>
</div>
SecondaryPage (2.):
<div ng-controller="secondController">
<!-- some other code -->
</div>
Ich habe versucht, für dieses Problem zu suchen, aber keine Antworten auf alle gefunden.
Frage: Wie soll ich gleiches Stück Code (Methoden save()
und load()
) einmal als Controller (ng-controller
) und andere Zeit als Service (via dependency-injection
enthielt)?
Dank
JS Bin als
erstellen Repro in jsbin oder plnkr] –
Verwenden Sie auch keine Methoden von anderen Steuerungen direkt aus andere Controller ... deshalb sind Services da. Controller sind nur da, um sich mit der Ansicht zu beschäftigen! –
@CallumLinington JSBin in Q hinzugefügt, stimme ich Ihnen auf diesem Prinzip zu (Strg für View, Dienst für Code-Behind), aber wie sollte ich vermeiden, denselben Code zweimal zu schreiben? Ich hatte eine Idee, 'layoutService' zu verwenden und dann' layoutController' als Wrapper zu erstellen, der die Service-Methoden aufrufen würde. Ist es geeignet? – Tatranskymedved