我最近一直在玩角度指令,关于链接和编译功能我有几个问题。
我有以下两个指令,它们具有相同的功能:
App.directive('repeatX', function(){
return {
transclude: 'element',
compile: function(element, attr, linker){
console.log('Compile repeatX');
return function(scope, $element, attrs, ctrl){
console.log('Link repeatX');
var parent = $element.parent();
for(var i = 0; i < Number(attrs.repeatX) - 1;i++){
var childScope = scope.$new();
linker(childScope, function(clone){
$element.after(clone.attr('repeat-x', 0));
});
}
}
}
}
});
App.directive('repeatX2', function(){
return {
compile: function(element, attrs){
console.log('Compile repeatX2');
for(var i = 0; i < Number(attrs.repeatX2) - 1;i++){
element.after(element.clone().attr('repeat-X2', 0));
}
return function(){
console.log('Link repeatX2');
}
}
};
});
似乎这两个指令几乎都在做同样的事情,但我完全不明白为什么Compile repeatX2
显示n
次,而Compile repeatX
只显示一次。
第二个问题是,linker
函数的确切工作是什么?
我在这里有一个工作示例:http://jsbin.com/rugohido/10/edit