如何从控制器内的事件访问范围?
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 前缀)。
如果有帮助,请告诉我。
【讨论】:
确实如此。我认为也许自下而上是一个更清晰的解决方案。以上是关于如何从控制器内的事件访问范围?的主要内容,如果未能解决你的问题,请参考以下文章