如何从包裹在自定义指令中的 ui-grid 中的按钮调用周围控制器中的方法?

How to call a method in surrounding controller from button in ui-grid wrapped in custom directive?

[tldr] 当网格包含在自定义指令中时,如何使列模板中的按钮从围绕网格的控制器调用方法? [再见]

为了解释,这里有 3 个笨蛋:

  1. P1) ui-grid

    中的基本操作栏

    http://plnkr.co/edit/nYqZsKRYbTA0aFXVZOoV

  2. P2) 相同但控制器与 vm

    http://plnkr.co/edit/b7x4Jjec5utkzSCrShMA

  3. P3) 在我的网格中包装 ui-网格(操作按钮不再起作用)

    http://plnkr.co/edit/74AdcFywgNZgeGJn4nrb

在我的应用程序中事情更复杂,我确实设法让自定义列中的按钮调用 my-grid 控制器上的一个方法(通过 grid.appScope.vm.FunctionName;在上面的 P3 中 my-grid 没有甚至有一个控制器,这是一个简化的例子),但我想我可能在错误的方向上挖掘得太深,所以...... 怎么让P3中grid列的按钮调用MainCtrl::Test方法?

经过 swalter 的一些帮助(通过 ui-grid glitter chat),我想我有一个不错的答案。

As documented ui-grid (3.x) 使用隔离作用域,但允许您的模板通过 $scope.grid.appScope.

到达外部作用域

我没有意识到的是,当您设置网格选项时,您可以通过设置 appScopeProvider 选项来覆盖 grid.appScope 将 return 的内容,并且这可以轻松设置为您在构建网格时可能方便的范围。

因此,对于我以前的 plunkrs 中的场景,这里有一个解决方案,只需将 appScopeProvider: $scope 添加到网格选项

http://plnkr.co/edit/0THPYZXPmqhfWYGo2ebE