gpt4 book ai didi

angularjs - 嵌入函数和克隆链接函数到底是做什么的?

转载 作者:行者123 更新时间:2023-12-03 05:25:47 25 4
gpt4 key购买 nike

来自directive Angular docs ,我看到compile函数有3个参数,其中之一是transclude。文档提供的唯一解释是:

transclude - A transclude linking function: function(scope, cloneLinkingFn).

我试图了解您在克隆链接功能中到底要做什么。我什至不知道传递给它的参数是什么。我发现one example它有一个名为 clone 的参数,该参数似乎是一个 HTML 元素。还有其他参数可用吗?这究竟是哪个 HTML 元素?我还在考虑在我的指令中使用 transinclude: 'element' 。使用 'element' 而不是 true 时,这些问题的答案会发生变化吗?

我通过简单的示例来理解嵌入,但我似乎找不到更复杂的示例,尤其是 transinclude: 'element'。我希望有人能够对这一切提供更彻底的解释。谢谢。

最佳答案

编辑:彻底改变我的答案,并将其标记为“社区维基”(对我来说意味着没有积分),因为当我回答这个问题时我完全错了

正如@Jonah 在下面指出的,here is a really good article on the compile option of directives and using the transclusion function

基本思想是编译函数应该返回一个链接函数。您可以使用链接函数中提供的嵌入函数来克隆嵌入的 DOM 元素,对其进行编译,然后将其插入到需要插入的位置。

Here is a better example I've pulled out of my butt on Plunker

编译函数的想法是,它让您有机会根据创建和调用链接函数之前传递的属性以编程方式更改 DOM 元素。

// a silly directive to repeat the items of a dictionary object.
app.directive('keyValueRepeat', function ($compile){
return {
transclude: true,
scope: {
data: '=',
showDebug: '@'
},
compile: function(elem, attrs, transclude) {

if(attrs.showDebug) {
elem.append('<div class="debug">DEBUG ENABLED {{showDebug}}</div>');
}

return function(scope, lElem, lAttrs) {
var items = [];
console.log(lElem);
scope.$watch('data', function(data) {

// remove old values from the tracking array
// (see below)
for(var i = items.length; i-- > 0;) {
items[i].element.remove();
items[i].scope.$destroy();
items.splice(i,1);
}

//add new ones
for(var key in data) {

var val = data[key],
childScope = scope.$new(),
childElement = angular.element('<div></div>');

// for each item in our repeater, we're going to create it's
// own scope and set the key and value properties on it.
childScope.key = key;
childScope.value = val;

// do the transclusion.
transclude(childScope, function(clone, innerScope) {
//clone is a copy of the transcluded DOM element content.
console.log(clone);

// Because we're still inside the compile function of the directive,
// we can alter the contents of each output item
// based on an attribute passed.
if(attrs.showDebug) {
clone.prepend('<span class="debug">{{key}}: {{value}}</span>');
}

//append the transcluded element.
childElement.append($compile(clone)(innerScope));
});

// add the objects made to a tracking array.
// so we can remove them later when we need to update.
items.push({
element: childElement,
scope: childScope
});

lElem.append(childElement);
}
});
};
}
};
});

关于angularjs - 嵌入函数和克隆链接函数到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13183005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com