如何从控制器内的事件访问范围?

Posted

技术标签:

【中文标题】如何从控制器内的事件访问范围?【英文标题】:How to access scope from an event inside a controller? 【发布时间】:2014-07-02 22:52:36 【问题描述】:

我有一个 div 元素和一个附加的 ng-click 事件处理程序。像

<div ng-controller='controller' ng-click='handle($event)'>
  <div ng-repeat='foo in foos'>foo.name</div>
</div>

当用户点击 foo.name 时,我可以捕获该事件,但似乎我无法访问由 ng-repeat 创建的隔离范围。

我尝试遵循这条路径 getEvent->getTarget->getBindedScope。

实际代码类似于

var a = $($event.target)
var ac = a.scope();

但是当我这样做时

console.log(ac);

注销的内容是“未定义”。

我希望在这里实现的是访问该范围并获取其他内容。如 foo.id 或 foo.someproperty

非常感谢您提前提供的帮助。

PS:我知道这不是angularjs的方式,但由于其他一些原因我希望实现。

PS2:$event.target 已尝试。记录结果类似于

【问题讨论】:

尝试记录 $event.target 并发布响应。 plnkr.co/edit/ZD3hOb1OKYzy26ELpudp?p=preview @tasseKATT 感谢在 plunker 中像魅力一样工作的人。但我仍然在我的实际项目中打印出“未定义”。好伤心。 你能显示更多代码吗?获得隔离作用域的方法是 a.isolateScope(),但我认为 ng-repeat 不会创建一个。您是否有另一个带有隔离范围的指令?然后尝试 a.isolateScope()。 【参考方案1】:

我不太清楚你想要做什么(我不使用 jQuery,也没有使用 AngularJS),但我知道你想要访问 foo 对象(或该项目的其他方面范围)在 ngClick 方法的 ngRepeat 中。

你能不这样做吗?

<div ng-controller='controller'>
  <div ng-repeat='foo in foos' ng-click='$parent.handle($event)'>foo.name</div>
</div>

这样,您将在 ngRepeat 项目的隔离范围内调用父控制器的 handle() 方法(由于 $parent 前缀)。

如果有帮助,请告诉我。

【讨论】:

确实如此。我认为也许自下而上是一个更清晰的解决方案。

以上是关于如何从控制器内的事件访问范围?的主要内容,如果未能解决你的问题,请参考以下文章

将范围变量从控制器绑定到指令而不使用$ watch

如何在 Angular 1.5 组件中监听范围事件?

从 Rails 脚手架显示日期范围内的数据

如何使用 Angular JS 从外部范围访问数组值

在控制器内的http调用之后加载部分文件

如何从控制器或其他组件/服务访问 websocket?