【问题标题】:Assign Parent Document Button Click Event from Child Document Controller in Angular JS从Angular JS中的子文档控制器分配父文档按钮单击事件
【发布时间】:2016-08-08 09:59:50
【问题描述】:

我是角度新手。

我有 Document A,其中有 Save 按钮和 IFrame

Iframe 具有 Document B 和角度控制器,其中定义了 saveClick()

在加载文档 B 时,我想将 saveClick() 函数分配给父文档按钮,以便当用户单击子控制器的保存按钮 saveClick() 时应该执行。

我以前在 JavaScript 中使用

parent.parent.saveClick = function () { ... }

按钮定义为

<button id='nobtnAdd' disabled onclick='return saveClick();' 
        title="New Record (Alt+A)">Save
</button>

文档 A 现在不使用 Angular JS,但如果需要,我可以使用它。

Iframe 将使用 Angular JS 加载各种文档,控制器将在其中分配保存例程。

我如何使用 angular 来实现这一点? 提前致谢。

【问题讨论】:

  • 研究使用postMessage API 在窗口之间进行通信。或者在角度run() 块中设置父函数。在这两种情况下都可以使用角度事件与应用程序的其余部分进行通信
  • @charlietfl 任何想法如何使用 run() 做到这一点?谢谢
  • $window.saveClick = function(){ /* angular event broadcast here */}

标签: javascript jquery angularjs iframe


【解决方案1】:

您可以做的是使用 run() 角度应用程序块将事件广播包装到全局范围函数中。那么你的 iframe 父代码将是相同的

angular
   .module('myApp',[....])
   .run(function($window, $rootScope){
      $window.saveClick = function(){ 
         $rootScope.$broadcast('saveClick');
      };

   }).controller('someCtrl', function($scope){
      $scope.$on('saveClick', function(){
        alert('Iframe clicked')
      });
   });

我个人会使用 postMessage API,这样您就可以避免使用全局范围。

【讨论】:

  • No..code in answer 全部在父 Angular 应用程序中。你提到你没有在孩子中使用角度。嗯..也许我把这个倒退到哪个是哪个
  • 会执行子控制器的saveClick吗?因为这是定义保存例程的地方。
  • 再次重新阅读问题后,您究竟需要做什么感到困惑。您是否尝试在两个窗口之间进行通信?
  • 主文档有带有保存按钮的工具栏。子文档定义了实际的保存例程实现。
  • 所以点击主文档需要传递给 iframe 和 Angular 应用程序?
猜你喜欢
  • 2016-12-20
  • 2014-08-07
  • 2015-02-10
  • 2013-10-10
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多