1

AngularJS中有没有一种方法可以仅使用javascript(而不是使用ng-*标记)以编程方式绑定控制器方法?

就像是

$("#foo").click(FooController.foo)

PS:我无权访问$compile

4

4 回答 4

3

你真的需要控制器的方法或作用域吗?

如果您需要范围,您可以使用angular.element('#myid').scope().method

但请记住,如果您在 AngularJS 事件处理之外进行任何对范围值的修改,则不会检测到它们,因此您需要将代码包装到范围的 $apply 函数中。

还要记住,在 AngularJS 中,来自 JS 的 DOM 修改通常是“大忌”

当然还有控制器的功能(使用“this.xxx = function () ..”创建)。我不确定访问它们是否很好,因为它们是私有的,但您应该能够以相同的方式访问:element(..).controller().method

于 2013-01-05T14:27:48.097 回答
2

它不受官方支持。当然,通过一些技巧在技术上是可行的,但是从 JavaScript 绑定事件处理程序意味着从控制器访问 DOM 元素,这违反了 AngularJS 的原则。

于 2013-01-05T12:43:05.200 回答
1

你可以,但你不应该。你可能会在路上遇到麻烦。

如果您可以对为什么要执行此操作提供更多解释,则可能会有更好(更简单)的方法。

于 2013-01-06T20:34:19.180 回答
1

为了在某​​种程度上扩展@Valentyn 的答案,如果您想访问控制器方法(而不是 $scope 方法)——例如,this在控制器构造函数中定义的方法(在 Angular 主页上,“tabs”指令定义了函数控制器上的“addPane”使用this)——你可以使用

angular.element('#myid').controller().method()
于 2013-01-05T23:18:02.867 回答