Javascript 在AngularJS中,如何执行一行JQuery代码?
我认为:Javascript 在AngularJS中,如何执行一行JQuery代码?,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我认为: <table class="table table-bordered" id="resultsTable"> <thead> <th>Classification</th> <th>Date</th> </thead> <tr ng-repeat="result in results">
<table class="table table-bordered" id="resultsTable">
<thead>
<th>Classification</th>
<th>Date</th>
</thead>
<tr ng-repeat="result in results">
<td>{{result.result}}</td>
<td>{{result.date}}</td>
</tr>
</table>
在控制器中,我具有按下按钮后加载数据的功能:
$scope.loadResults = function() {
var url = "URL WITH QUERY";
$http.get(url).success(
function(data, status, headers, config) {
for (var i = 0; i < data.length; i++) {
$scope.results.push({date: data[i].date, p: data[i].p, result: data[i].result});
}
//**IDEALLY I WOULD WANT TO RUN THE JQUERY LINE HERE**
}
);
};
$scope.loadResults=function(){
var url=“带查询的url”;
$http.get(url).success(
函数(数据、状态、标题、配置){
对于(变量i=0;i
因此,我要做的是在将所有数据加载到results数组之后,运行通常在documentready上运行的这一行
你会怎么做
请,请,提供一个例子,因为我一直在阅读“指令”,但没有人说它到底允许调用jquery,jquery的行应该放在哪里,或者如何从我的控制器调用它。您只需在您的作用域中使用作用域事件
$emit
或$broadcast
和$on
在适当的时间调用jquery函数,就可以实现这一点
$emit
和$broadcast
之间的差异:
- $broadcast--将事件向下分派到所有子作用域
- $emit--通过作用域层次结构向上调度事件
这个例子有助于理解它:没有任何东西可以阻止您这样做:
$scope.loadResults = function() {
var url = "URL WITH QUERY";
$http.get(url).success(
function(data, status, headers, config) {
for (var i = 0; i < data.length; i++) {
$scope.results.push({date: data[i].date, p: data[i].p, result: data[i].result});
}
$('#resultsTable').fixedHeaderTable({ footer: true, cloneHeadToFoot: false, fixedColumn: false });
}
);
};
$scope.loadResults=function(){
var url=“带查询的url”;
$http.get(url).success(
函数(数据、状态、标题、配置){
对于(变量i=0;i
但这并不是最佳实践
此外,您可能需要等待角度摘要循环完成,以便处理ng重复。您可以使用$timeout()
或可能的$scope.$evalAsync()
(我不能100%确定在本例中的后续工作,它可能仍然触发太早,因此您需要对其进行测试)
一个更干净的解决方案是为该插件创建一个指令。我在文档中没有看到允许动态数据的Fixed Header Table插件的任何内容,因此您需要通过承诺确保在数据准备好并呈现后进行初始化来解决该问题,或者观察结果数组,以便调用插件上的
destroy
并重新初始化它。您对jquery位置的注释不正确。需要在房间里function@galchenAngularJS是否保证从模型更改同步进行DOM操作?@galchen fixed.@用户这是不正确的,但我想展示我想要实现的目标。我认为您可以使用事件来解决这个问题。我不确定DOM操作是否是同步的,但我假设在更新$scope.results数组后使用$emit可以完成这个任务。这个例子正好相反。我看到控制器发出并拾取一个事件。我想要一个从控制器发出并由运行jquery的其他程序拾取的事件。如果您想要从$scope
中拾取该事件,则可以使用$rootScope
。此外,在这种情况下,我看到了另一个选项。您可以使用$q.when(value)
保持函数调用,直到值
未解析为止--
$scope.loadResults = function() {
var url = "URL WITH QUERY";
$http.get(url).success(
function(data, status, headers, config) {
for (var i = 0; i < data.length; i++) {
$scope.results.push({date: data[i].date, p: data[i].p, result: data[i].result});
}
$('#resultsTable').fixedHeaderTable({ footer: true, cloneHeadToFoot: false, fixedColumn: false });
}
);
};