In einer AngularJS-Anwendung (Haupt) habe ich eine iframe
innerhalb der es eine andere AngularJS-Anwendung (iframe) auch unter meiner Kontrolle ist. Ich möchte Daten zwischen zwei Diensten teilen, eins in der Hauptanwendung und eins in der iframe Anwendung. Sie müssen beide zum selben Objekt lesen und schreiben.Access AngularJS-Service von einem Service in einem anderen Rahmen
// main
// ... routes ...
views: { main: {
controller: function ($scope, serviceA) {
$scope.serviceA = serviceA;
},
templateUrl: 'iframe.html'
}
// ...
function ServiceA() {
this.sharedData; // exposed to controllers in main app
}
// ...
// iframe
// ...
function ServiceB() {
this.sharedData; // exposed to controllers in iframe app
}
// ...
Wenn in einem Controller in iframe Anwendung verwalten ich serviceA.sharedData
wie diese Referenz:
var self = this;
var parentScope = $window.parent.angular.element($window.frameElement).scope();
parentScope.$watch('serviceA.sharedData', function (newValue, oldValue) {
self.sharedData = newValue;
}
dies erreicht werden kann und wie?
Ich habe folgendes gelesen, aber konnte es nicht in eine Lösung drehen, doch:
die Antwort auf die zweite Frage sagt, Sie verweisen, dass Sie das Winkelobjekt eines iframe mit 'theIFrameElement zugreifen können .contentWindow.angular'. Funktioniert das für dich? – user1950929
Ja, es ist möglich, auf das Objekt 'eckig' wie folgt zuzugreifen. Aber wie kann ich dann auf einen darauf registrierten Dienst zugreifen? – hielsnoppe
Sie können den Dienst zu Ihrem Bereich in der Steuerung hinzufügen, dann können Sie von außen darauf zugreifen (d. H. Der Elternrahmen). – user1950929