AngularJS中是否有一种方法可以仅使用javascript(而不是使用ng-*
标记)以编程方式绑定控制器方法?
像
这样的东西$("#foo").click(FooController.foo)
PS:我无法访问$compile
答案 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)
你可以,但你不应该。你可能会遇到麻烦。
如果您可以更多地解释为什么要这样做,可能会有更好(更简单)的方法。