AngularJS中有没有一种方法可以仅使用javascript(而不是使用ng-*
标记)以编程方式绑定控制器方法?
就像是
$("#foo").click(FooController.foo)
PS:我无权访问$compile
AngularJS中有没有一种方法可以仅使用javascript(而不是使用ng-*
标记)以编程方式绑定控制器方法?
就像是
$("#foo").click(FooController.foo)
PS:我无权访问$compile
你真的需要控制器的方法或作用域吗?
如果您需要范围,您可以使用angular.element('#myid').scope().method
但请记住,如果您在 AngularJS 事件处理之外进行任何对范围值的修改,则不会检测到它们,因此您需要将代码包装到范围的 $apply 函数中。
还要记住,在 AngularJS 中,来自 JS 的 DOM 修改通常是“大忌”
当然还有控制器的功能(使用“this.xxx = function () ..”创建)。我不确定访问它们是否很好,因为它们是私有的,但您应该能够以相同的方式访问:element(..).controller().method
它不受官方支持。当然,通过一些技巧在技术上是可行的,但是从 JavaScript 绑定事件处理程序意味着从控制器访问 DOM 元素,这违反了 AngularJS 的原则。
你可以,但你不应该。你可能会在路上遇到麻烦。
如果您可以对为什么要执行此操作提供更多解释,则可能会有更好(更简单)的方法。
为了在某种程度上扩展@Valentyn 的答案,如果您想访问控制器方法(而不是 $scope 方法)——例如,this
在控制器构造函数中定义的方法(在 Angular 主页上,“tabs”指令定义了函数控制器上的“addPane”使用this
)——你可以使用
angular.element('#myid').controller().method()