Die Injektion service/factory Richtlinie
Habe ich zwei/mehr services mit derselben Signatur. Kann ich dynamisch Spritzen Sie dann in die Richtlinie? so etwas wie unten
var app = angular.module('app',[]);
app.factory('myData', function(){
return {
name : "myName",
id : 1,
create: function(){
//do something
}
}
});
app.factory('yourData', function(){
return {
name : "yourName",
id : 1,
create: function(){
//do something
}
}
});
app.directive('changeIt',function($compile){
return {
restrict: 'CA',
scope:{
data : '=' //or some oether syntax?
},
link: function (scope, element, attrs) {
scope.name = data.name;
}
}
});
Dann sollte ich in der Lage sein, um Sie mit der Direktive, wie unten
<div class='change-it' data='myData'>{{name}}</div>
<div class='change-it' data='yourData'>{{name}}</div>
Ich würde das hinzufügen von mehr services mit derselben Signatur und ich sollte in der Lage sein, die Richtlinie ohne änderung, ist es möglich?
InformationsquelleAutor Murali | 2013-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht möglich, die Art und Weise. Das beste, was Sie tun können, ist die Bindung der Anwendungsbereich der Richtlinie auf eine Funktion des übergeordneten Bereichs, wird eine Instanz des service:
dann aus Ihrer Sicht:
Schließlich müssen Sie
getMyData()
undgetYourData()
an den übergeordneten scope:Plunker Skript hier.
Ich denken kann, einen anderen Ansatz, aber: Sie könnte erstellen einer abstrakten Fabrik und injizieren es in der Richtlinie, und übergeben Sie einen parameter, um die Richtlinie es könnte also sagen, die abstrakte Fabrik den richtigen service. So etwas wie dieses:
Und jetzt müssen Sie gehen, die Art der Richtlinie:
Plunker hier.
Ich glaube, du bist in der Lage zu definieren, die eine einfache Steuerung ausführt, die die datacall und übergeben es an die Richtlinie mit ng-controller="YourCtrl"
Wirklich hilfreich ist. Danke!
InformationsquelleAutor Michael Benford
Hier ist eine Lösung ohne die Notwendigkeit für eine übergeordnete Steuerung oder eine Fabrik der Fabriken.
In der Richtlinie, injizieren die $Injektor - Dienst zum abrufen der factory-Instanz:
Feststellen, es tut sich was in der controller-Methode. Konnte ich nicht machen, $Injektor.get() die Arbeit in der link-Funktion.
Vorlage :
-- Edit --
Funktionierende Lösung innerhalb der link-Funktion :
InformationsquelleAutor Julien Moumné