2013-11-22 4 views
5

, die Angularjs Controller docs zu lesen und über gestolpert:Angular Docs: Wie kann man zustandslosen/stateful Code zwischen den Controllern teilen?

staatenlos oder Stateful-Code über Controller Sharing - Verwenden Winkel Dienste statt.

Aber das lässt mich unsicher. Wie kann man einen zustandslosen/stateful Code zwischen Controllern teilen? Oder was bedeutet der "Code" hier? Ein Model? Außerdem beziehen sich die Controller nicht aufeinander, soweit ich das verstanden habe. Kann jemand bitte etwas für mich (andere) klären? Vielen Dank.

+0

Sehen Sie hier http://StackOverflow.com/Questions/13180293/angularjs-multiple-uses-of-controller-and-rootscope/13181133#13181133 wie ein Dienst verwendet werden kann, um einen Zustand (in diesem Fall ein Menü) über mehrere Instanzen desselben Controllers (aber es könnten auch 2 oder mehr verschiedene Controller sein). –

Antwort

2

Ich denke, was sie sich beziehen, könnte eine der Methoden sein, um Daten "zu persistieren", sie zwischen Controllern oder zwischen Routenänderungen zu teilen. Eine Möglichkeit, dies zu tun, ist es in Ihrem rootScope zu speichern, ein anderer ist es, einen Dienst zu verwenden. Wenn Sie einen Dienst wie folgt definieren:

.factory("MyDataObject", function() { 
    return {}; 
}) 

Dann wird MyDataObject das gleiche Objekt sein überall Sie es nennen, so dass Sie die Dinge in sie speichern, um Daten zu teilen, Funktionen und Zustände zwischen Steuerungen (oder Richtlinien oder andere Dienste, usw.).

Sie nie mit der Winkel Dokumentation weiß, aber ich würde vermuten, dass das, was sie diese Antwort über :)

Siehe zum Beispiel sprechen: Angularjs, passing scope between routes

+0

Dank der Markierung als akzeptierte Antwort. Seit dem es kam. Aber ja, es sieht so aus, als ob sie "Daten" teilen statt "Code" teilen. –

2

Hier ist Gegenstand meiner Sicht. Wie eckige Jungs immer versucht haben zu erklären, ist der Umfang nicht dein Modell. Eckige "Dienste" sind eine Art, dies zu tun, aber Wortservice ist ein solcher und überladener Begriff. Aus DDD-Hintergrund kommend, kann ich Wortservice nicht mit einem Staat oder einer Staatlichkeit vereinbaren, das ergibt für mich keinen Sinn. Was mehr Sinn macht, ist ViewModel oder wie immer man es nennen möchte. Da ich mit Silverlight mit MVVM-Muster gearbeitet habe, nenne ich sie ViewModel. Da es eine Aufgabe eines "Controllers" ist, einen Scope für eine View bereitzustellen, waren meine Controller bisher sehr schlank. Ein Großteil der Logik befindet sich in ViewModels, die über einen $ -Bereich, den der Controller erstellt, mit einer View verknüpft werden. Ist das sinnvoll? Daher könnte mein Controller eine Abhängigkeit von beispielsweise mySearchViewModel annehmen, ein Großteil der Logik ist darin enthalten und kann zwischen Controllern geteilt werden, und um ihn mit einer Ansicht zu verknüpfen, würden Sie in mySearchController so etwas wie $scope.vm = mySearchViewModel machen.

+0

Danke, es macht Sinn. Ich bin jedoch nicht ganz damit einverstanden, dass der für die Verarbeitung Verantwortliche sich eine Meinung geben sollte - ich denke, dass es stattdessen eine Pflicht der Ansicht ist. Weil die Ansicht immer einem Controller zugeordnet ist und nicht mit einem Controller funktioniert, den sie nicht unterstützt. Ebenso kann die Ansicht nur 1 Controller haben, aber der Controller kann verschiedene Ansichten haben. –

+0

@Makov: Ich habe nie gesagt, dass der Controller sich selbst die Ansicht zuweist. Controller bietet einen Bereich für die Ansicht. Außerdem würde ich von einem Controller wegbleiben, der mehreren Ansichten zugeordnet ist. – epitka

+0

Entschuldigung, ich habe dich falsch verstanden. Aber es ist immer noch Standard, einen Controller mit mehreren Ansichten zu verwenden. Deshalb ist es im ersten Teil entkoppelt. –

Verwandte Themen