作为第二个参数传递给链接函数的函数的目的是什么?
What the purpose of the function passed to linking function as a second parameter
我偶然发现了下面这段代码:
var tooltipLinker = $compile(template);
tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {
if (appendToBody) {
$document.find('body').append(tooltip);
} else {
element.after(tooltip);
}
});
我的问题是,在angular框架中,函数作为第二个参数传递给链接函数的目的是什么?我是在问而不是回调的目的是什么
在文档中它说$compile
返回:
function(scope, cloneAttachFn=, options=)
所以第二个参数函数似乎是cloneAttachFn
。现在我想知道它是否与transcluded
函数中的cloneAttachFn
具有相同的目的?
此函数允许您访问绑定视图并克隆模板。它还允许您将先前克隆的元素放置在您想要的任何位置。
与传统
的区别var tooltipLinker = $compile(template);
var tooltip = tooltipLinker(tooltipLinkedScope);
工具提示是对原始元素的引用,而不是克隆
angular.module('app', [])
.directive('clone', function($compile) {
return {
restrict: 'E',
link: function($scope, $element) {
$scope.value = 10;
var elem = angular.element('<div>{{value}}</div>');
var compiled = $compile(elem)($scope);
console.log('elem === compiled', elem === compiled);
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<clone></clone>
</div>
另一方面,当提供克隆附加函数时,元素将始终是原始元素的克隆。
angular.module('app', [])
.directive('clone', function($compile) {
return {
restrict: 'E',
link: function($scope, $element) {
$scope.value = 10;
var e;
var elem = angular.element('<div>{{value}}</div>');
var compiled = $compile(elem)($scope, function(cloned, scope) {
e = cloned;
});
console.log('elem === compiled', elem === compiled);
console.log('elem === callback element', elem === e);
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<clone></clone>
</div>
在第一种情况下,原始元素被编译并准备放置在DOM中,在第二种情况下,原始元素被编译,但结果在克隆中可用。
如果你在第二种情况下console.log
元素,你会看到它仍然有插值符号。您必须将克隆放置在DOM中。
该函数的目的是告诉angular如何处理模板引用,要么直接链接它,要么先创建一个克隆,然后再链接克隆。
相关文章:
- Javascript 对象的推荐构造函数是什么?
- JavaScript 中的“ScriptEngine”函数是什么?
- jQuery中的.proxy()函数是什么
- 删除 href 周围的文本的正确 jquery 函数是什么
- 弹出窗口的确切函数是什么
- javascript中的strord函数是什么?
- 访问cookie最可靠的JavaScript函数是什么?
- Node.js中的函数构造函数是什么
- 交叉过滤中的reduceAdd, reduceSum, reducerremove函数是什么?它们应该如何使用?
- 为什么console.trace()的结果以一个“匿名函数”结束?这个函数是什么?
- 数组字面量中的构造函数是什么?
- Javascript中类似php函数substr()的函数是什么?
- 参数中的匿名函数是什么意思?
- 拆分函数是什么样子的?
- jquery中. max()的等效函数是什么?
- 在Node Js中,tcp连接中socket的.on函数是什么?
- firefox浏览器(所有版本)中的.load()等效函数是什么?
- jQuery' width()函数的Javascript等效函数是什么?
- jQuery中的.selectmany()函数是什么?
- setTimeout执行的函数是什么?