【发布时间】:2015-02-04 10:09:13
【问题描述】:
在一个 AngularJS 应用程序(主)中,我有一个 iframe,其中还有另一个 AngularJS 应用程序(iframe)也在我的控制之下。我想在两个服务之间共享数据,一个在主应用程序中,一个在 iframe 应用程序中。它们都需要读取和写入同一个对象。
// 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
}
// ...
在 iframe 应用程序的控制器内部时,我设法像这样引用 serviceA.sharedData:
var self = this;
var parentScope = $window.parent.angular.element($window.frameElement).scope();
parentScope.$watch('serviceA.sharedData', function (newValue, oldValue) {
self.sharedData = newValue;
}
这可以实现吗?如何实现?
我已阅读以下内容,但仍无法将其转化为解决方案:
【问题讨论】:
-
您引用的第二个问题的答案是,您可以使用
theIFrameElement.contentWindow.angular访问 iframe 的角度对象。这对你有用吗? -
是的,可以像这样访问
angular对象。但是我如何才能访问在其上注册的服务呢? -
您可以将服务添加到控制器中的范围,然后您可以从外部(即父框架)访问它。
标签: javascript angularjs iframe