如何从 AngularJS 控制器正确调用 jQuery

Posted

技术标签:

【中文标题】如何从 AngularJS 控制器正确调用 jQuery【英文标题】:How to call jQuery properly from an AngularJS controller 【发布时间】:2012-06-05 11:21:26 【问题描述】:

我正在尝试将 jQuery-UI 选项卡与 AngularJS 一起使用。

查看示例here

问题是在控制器中调用jQuery("#tabs").tabs(); 似乎连接了“标签化”某些东西所需的“一半”。

想法?

【问题讨论】:

【参考方案1】:

您根本不应该在控制器中进行 DOM 操作。相反,您应该使用指令。

我一直在开发一组指令供我自己使用:https://github.com/ganarajpr/Angular-UI-Components

原理是把这些简单的代码放到指令文件中:

.directive('maketab',function() 
        return function(scope, elm, attrs) 
            elm.tabs(
                show: function(event, ui) 
                        scope.$broadcast("tabChanged",ui);
                
            );
        ;
    )

然后,在要转换为选项卡的 div 中:

<div id="mytab" maketab>

<ul>
....
</ul>

<div>...</div>
...
</div>

请注意,div 及其子结构应符合 JQuery UI 的要求。

有关更强大的示例和更多组件,请查看 github 存储库。

【讨论】:

我也遇到了同样的麻烦,甚至应用了指令的东西(如你所见here) 嘿@ganaraj,你能以编程方式绑定点击处理程序吗?我正在构建一个应用程序来以图形方式构建表关系(来自 json)。因此,假设我想在右键单击时在画布上添加一个新表格。我该怎么办?我对 Angular 很陌生,但对 Js 或 Jquery 不熟悉。 @berto77 你可以。不过,我建议您处理指令中的所有内容,因为这似乎是最合乎逻辑的地方。我一直在想一种让 Angular 和 canvas 一起工作的方法。我不确定它们是否适合彼此,因为它们针对不同的用例......虽然角度适用于网络应用程序,但画布很适合游戏(我认为这是一个不同的场景) @ganaraj 我不同意。我目前正在构建一个 WebGL 浏览器策略游戏。目前我有一个带有 jquery ui 覆盖的画布。我对在我的 ui 组件中使用 angular 感到非常兴奋,但画布仍然是绘制宇宙的核心元素。 @mattblang 你不同意什么?如果您在画布上放置一个指令并处理该指令内的所有内容,这几乎取消了 Angular 提供的所有功能,不是吗?操作画布中的像素似乎非常“DOM 操作”y ..所以它似乎并不自然地适合控制器内部 ..

以上是关于如何从 AngularJS 控制器正确调用 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

如何从angularjs中的另一个控制器调用函数

如何从AngularJS中的另一个控制器调用函数? [复制]

从angularjs中的服务调用控制器函数

如何在 Angularjs 中调用 Nodejs 方法

从 AngularJS 控制器调用 phonegap 插件

如何从AngularJS获得响应$ http.get()。then()