如何使用javascript绑定Angular控制器函数

时间:2013-01-05 12:14:34

标签: javascript angularjs

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

这样的东西
$("#foo").click(FooController.foo)

PS:我无法访问$compile

4 个答案:

答案 0 :(得分:3)

你真的需要控制器的方法或范围吗?

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

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

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

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

答案 1 :(得分:2)

它没有得到官方支持。确保技术上可以使用一些黑客,但JavaScript中的绑定事件处理程序意味着从控制器访问DOM元素,这违反了AngularJS的原则。

答案 2 :(得分:1)

如果您想要访问控制器方法(而不是$ scope方法),请稍微扩展@Valentyn的答案 - 例如,在控制器构造函数中使用this定义的方法(在Angular主页上) ,“tabs”指令使用this在控制器上定义函数“addPane” - 你可以使用

angular.element('#myid').controller().method()

答案 3 :(得分:1)

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

如果您可以更多地解释为什么要这样做,可能会有更好(更简单)的方法。