AngularJS:使用 jQuery 将事件侦听器绑定到 ng-repeat 生成的元素
AngularJS: Bind event listener, using jQuery, to elements generated by ng-repeat
我从AngularJS开始,我需要将"load"和"error"事件绑定到iframes:
<ul data-ng-controller="WebServicesCtrl">
<li data-ng-repeat="webservice in webservices">
<a href="{{webservice.wsdl}}">{{webservice.name}}</a>
<iframe src="{{webservice.wsdl}}" class="hidden"></iframe>
</li>
</ul>
我试图使用$scope.watch
和$scope.apply
但没有成功。我需要在创建 iframe 时绑定事件,因为它会自动加载给定的src
。像这样:
app.controller('WebServicesCtrl', function WebServicesCtrl($scope, $http) {
$http.get('/webservices').success(function(data /* from expressjs, yaaay! */) {
$scope.webservices = data;
/* make iframes listen to load and error right after scope change,
before AngularJS inject them. */
});
});
我MUST NOT
使用<iframe onload="" onerror="" />
.我想知道jQuery表单。"纯AngularJS"案例也是受欢迎的。只是不记得不需要jQuery。有时我们得到了巨大的遗产,事情不可能是美丽的。
我应该使用$injector
或类似的东西吗?那份文件太年轻了,太伤人了。感觉我很快就要研究源代码了。
最好的选择是使用环绕这两个标签的指令。
<a href="{{webservice.wsdl}}">{{webservice.name}}</a>
<iframe src="{{webservice.wsdl}}" class="hidden"></iframe>
定义如下内容:
app.directive("aIframe", function () {
return {
template: '<div><a href="{{webservice.wsdl}}">{{webservice.name}}</a>' +
'<iframe src="{{webservice.wsdl}}" class="hidden"></iframe></div>',
restrict: 'A',
scope: {
webservice: '=webService'
},
link: function(scope, element, attrs) {
$(element).find("iframe").on("load", function () {
//some code
});
$(element).find("iframe").on("error", function () {
//some code
});
}
};
});
使用 link 函数的优点是,它将在每次初始化指令时运行,并在从ng-repeat
范围完成作用域绑定后立即运行。
您的 HTML 现在将更改为:
<ul data-ng-controller="WebServicesCtrl">
<li data-ng-repeat="webservice in webservices">
<div a-iframe web-service="webservice"></div>
</li>
</ul>
更多关于directives
及其参数的信息,在这里: AngularJS: 指令
相关文章:
- 使用 ng-repeat访问 ng 表单元素/值
- AngularJS:根据其他对象预先选择ng repeat中的select元素
- Angular js将只显示ng repeat中的第一个元素
- 带有 ng-repeat 的 Angular JS 指令无法遍历子元素
- $compile和ng repeat未返回正确的元素
- 使用ng repeat时元素ID重复
- AngularJS:如何使用ng repeat来显示父数组中包含的数组的所有元素
- 如何使用ng repeat在匹配的元素上添加活动类
- 使用ng repeat将表单元素绑定到角度中的新对象
- 如何只更新ng repeat中的部分元素
- 操作NG-REPEAT的第一个元素
- AgularJS ng-repeat而不重复父元素
- 将 'ng-repeat' 元素传递给 javascript 函数
- 以编程方式在 ng-repeat元素上切换类
- 使用AngularJS指令来更改ng-repeat元素的类
- 如何强制jQuery“监听”?为将来的AngularJS ng-repeat元素激活插件
- Ng-click适用于所有ng-repeat元素
- ng-repeat元素# 39;索引在排序时改变
- 将d3 svg附加到当前的ng-repeat元素
- 我可以在javascript中声明ng-repeat元素吗?