【问题标题】: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 并发布响应。
  • @tasseKATT 感谢在 plunker 中像魅力一样工作的人。但我仍然在我的实际项目中打印出“未定义”。好伤心。
  • 你能显示更多代码吗?获得隔离作用域的方法是 a.isolateScope(),但我认为 ng-repeat 不会创建一个。您是否有另一个带有隔离范围的指令?然后尝试 a.isolateScope()。

标签: jquery angularjs events dom scope


【解决方案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 前缀)。

如果有帮助,请告诉我。

【讨论】:

  • 确实如此。我认为也许自下而上是一个更清晰的解决方案。
猜你喜欢
  • 2015-09-09
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 2014-02-22
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多