gpt4 book ai didi

AngularJS ngRepeat 指令没有编译选项

转载 作者:行者123 更新时间:2023-12-02 22:59:13 28 4
gpt4 key购买 nike

我找到了source code ngRepeat 没有 HTML Compiler 指南中提到的 compile 选项.

我对此感到困惑......

谁能告诉我为什么......

最佳答案

ngRepeat 有一个嵌入选项。

  • 当使用 transclude 时,$compile 编译被嵌入的元素,然后向指令的链接函数提供一个 childTranscludeFn 函数作为第五个参数(或 $transclude指令的 Controller )
  • 此函数用于创建同一已编译模板的多个克隆。
  • 仅在嵌入时编译一次。

来自 compile.js source code 的小代码片段:

if (directiveValue = directive.transclude) {

// some code

if (directiveValue == 'element') {

// some code

childTranscludeFn = compile($template, transcludeFn, terminalPriority,
replaceDirective && replaceDirective.name, {
// some comments
nonTlbTranscludeDirective: nonTlbTranscludeDirective
});
} else {
// some code
childTranscludeFn = compile($template, transcludeFn);
}
}

内部ngRepeat:

  • 该指令监视集合的更改
  • 更改时,它会迭代所有集合项以查找新添加的项(或删除的项)
  • 它将嵌入的内容克隆到每个新项目的新子范围(使用 $transclude)

来自 ngRepeat source code 的片段:

var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
var NG_REMOVED = '$$NG_REMOVED';
var ngRepeatMinErr = minErr('ngRepeat');
return {
transclude: 'element',
priority: 1000,
terminal: true,
$$tlb: true,
link: function($scope, $element, $attr, ctrl, $transclude){

// some code

$scope.$watchCollection(rhs, function ngRepeatAction(collection){

// some code

for (index = 0, length = collectionKeys.length; index < length; index++) {

// some code

if (!block.scope) {
$transclude(childScope, function(clone) {

// some code

});
}
}

// some code
});
}
};

关于AngularJS ngRepeat 指令没有编译选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21387827/

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