angularjs链接功能的用途
Purpose of angularjs link function
我正在努力很好地理解angularjs链接函数
我有一个自定义延迟加载指令的例子
script.js:
//Code
angular.module('app', []);
angular.module('app').controller('mainCtrl', function($scope) {
$scope.items = [2,5,23,253];
});
angular.module('app').directive('myLazyRender', function() {
return {
restrict: 'A',
transclude: 'element',
priority: 900,
link: function(scope, el, attr, ctrl, transclude) {
var hasBeenShown = false;
var unwatchFn = scope.$watch(attr.myLazyRender, function(value) {
if(value && !hasBeenShown) {
hasBeenShown = true;
transclude(scope, function(clone) {
el.after(clone);
});
unwatchFn();
}
})
}
}
})
angular.module('app').directive('echo', function() {
return {
priority: 1300,
link: function() {
console.log('echo');
}
}
})
index.html:
<!DOCTYPE html>
<html ng-app="app">
<head>
<link data-require="bootstrap-css@3.1.1" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<script data-require="jquery@*" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script data-require="bootstrap@3.1.1" data-semver="3.1.1" src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script data-require="angular.js@1.3.0-rc.4" data-semver="1.3.0-rc.4" src="https://code.angularjs.org/1.3.0-rc.4/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="mainCtrl">
<h1>Hello Plunker!</h1>
<div my-lazy-render="showit" echo ng-repeat="item in items">
{{item}}
</div>
<button class="btn btn-primary" ng-click="showit = true">Render Content</button>
</body>
</html>
plunker链接示例
我发现的文档解释了链接函数的意图是创建一个事件侦听器来处理事件
如果是的话,有人能解释一下这个事件监听器的目的,以及在这个例子中,在元素'tranclude:'element'的transclusion的情况下他可以监听的事件类型吗。
是否有一种DOM事件为项进行绑定
在该示例中,当我单击渲染内容按钮时,将加载项内容。
基本上,链接函数在传递给div
元素(在本例中为showit
)的my-lazy-render
属性的对象上设置一个观察程序,该观察程序在该对象的值更改时执行该函数。如果它变为true(单击按钮时就是这种情况),它将在当前元素之后复制该元素(即用my-lazy-render
属性复制div
)。
这种复制是由传递给链接函数的transclude
函数完成的。在这种情况下,clone
参数是元素本身的副本,因为transclude设置为element
。(请参阅此答案以了解更多关于transclusion的信息。)
此外,scope.$watch
返回一个函数,该函数在被调用时将禁用观察程序(即,当值发生变化时,该函数将不会再次执行)。
相关文章:
- 如何绑定多个具有相同敲除功能、传递不同ID的链接
- 功能点击使打开新链接,不转到原始链接
- 修复Javascript代码以将文本中的所有Youtube链接转换为Youtube ID功能
- 如何在用户提交链接时添加提取推文并将其发布到站点的功能
- 具有双重功能的按钮:在_blank窗口中打开一个链接,再加上_self中的另一个链接
- 通过模糊功能传递链接,而不是单击另一个链接
- AngularJS:在指令's链接功能
- 如何在链接上附加onclick事件以使用javascript功能
- 在链接中禁用window onbeforenload功能
- 如何使用Foundaton 6更改小屏幕上顶级链接的功能
- DOM在指令中未就绪's链接功能.hacky Timeout是唯一的解决方案吗
- 如何禁用滚动但保留使用锚链接滚动的功能
- 是的,没有带有链接的JavaScript删除功能的选项
- 链接功能中的角度单元测试$attrs
- 链接的按钮按住功能
- 当用户单击滚动页面的锚链接时,是否可以禁用 .scroll 功能
- 附加链接上的单击功能不起作用
- jQuery:使用 var 快捷方式分配数据以及如何链接功能以在加载和单击时运行
- onClick功能链接不工作
- NodeJS mongo - 参考唯一生成的点击功能链接