在AngularJS中,如何执行一行JQuery代码?
在AngularJS中,如何执行一行JQuery代码?
我想在初始加载页面时使用浮动表头,但由于表格为空,所以会出现奇怪的结果(参考http://www.fixedheadertable.com/)。如果表格内容是静态的,这个方法就可以正常工作:
在控制器中,我有一个在按下按钮后加载数据的函数:
所以我想做的是,在将所有数据加载到results
数组之后运行这行通常在文档准备好时运行的代码。
你会怎么做?
请提供一个例子,因为我一直在阅读关于“指令”的内容,但没有人详细说明它如何允许调用jquery,应该将jquery代码放在哪里,或者如何从我的控制器中调用它。
在AngularJS中,如何执行一行JQuery代码?
问题的出现原因是,有一个需求需要在AngularJS控制器中执行一行JQuery代码,但是由于AngularJS使用了自己的作用域和事件机制,直接在控制器中执行JQuery代码是不被支持的。
解决方法是使用作用域事件($emit或$broadcast)和$on函数来调用JQuery函数。$emit向上派发事件,$broadcast向下派发事件。通过在控制器中触发一个事件,然后在其他地方监听该事件并执行JQuery代码,就可以达到目的。
如果希望在$scope之外捕获该事件,则可以使用$rootScope。
另外,还有一种解决方法是使用$q.when(value)函数来延迟执行JQuery代码,直到value被解析。$q.when函数可以将一个值或者一个返回Promise的函数转换为一个Promise对象。
以下是一个示例代码和相关链接,可以帮助理解问题和解决方法:
// 在控制器中触发事件 $scope.$emit('runJQuery'); // 在其他地方监听事件并执行JQuery代码 $rootScope.$on('runJQuery', function() { // 执行JQuery代码 $('body').css('background-color', 'red'); }); // 使用$q.when延迟执行JQuery代码 $q.when($http.get('api/data')).then(function(response) { // 执行JQuery代码 $('body').css('background-color', 'red'); });
示例链接:[http://jsfiddle.net/sebmade/GkarV/](http://jsfiddle.net/sebmade/GkarV/)
$q.when文档链接:[http://docs.angularjs.org/api/ng.%24q#when](http://docs.angularjs.org/api/ng.%24q#when)