将新元素应用为指令的默认元素
Fore apply new element as default element for directive
如何强制将新元素设置为指令中的默认元素?注意新元素必须连接到这个范围。
示例:
<div ng-test />
JS:
app.directive("ngTest", ["$interval", "$compile", function($interval, $compile) {
return {
restrict:'A',
link: function($scope, $element, $attrs) {
if($element[0].tagName === "div"){
var el = document.createElement('span');
el.setAttribute('ngTest','')
$element[0].outerHTML = el.outerHTML;
}
console.log($element[0]) // still <div>, but from domDocument has been changed to span
// how to force apply?
}
}
}]);
您可以为指令应用模板,并且有替换标志,它会删除旧的指令元素并将模板插入为 $element[0]
。
return {
replace: true,
template: '<span></span>',
restrict: 'A',
//...
};
也许您需要做的就是使用指令 ngTest
?
为 div 设置内联样式
div[ng-test] {
display: inline;
}
但是如果你真的有充分的理由将div
替换为span
,你可以这样做:
var el = angular.element(document.createElement('span'));
el.attr('ng-test', '').html($element.html());
$element.replaceWith(el);
$compile(el)($scope);
$element = el;
请注意,您不能只替换 outerHTML
。您需要正确设置内部内容,设置属性(它是 ng-test
,而不是 ngTest
),用新的 span 替换旧的 div 并编译它。
演示:http://plnkr.co/edit/EsU7Ke4nMlPiQXZ7VWXc?p=preview
如何强制将新元素设置为指令中的默认元素?注意新元素必须连接到这个范围。
示例:
<div ng-test />
JS:
app.directive("ngTest", ["$interval", "$compile", function($interval, $compile) {
return {
restrict:'A',
link: function($scope, $element, $attrs) {
if($element[0].tagName === "div"){
var el = document.createElement('span');
el.setAttribute('ngTest','')
$element[0].outerHTML = el.outerHTML;
}
console.log($element[0]) // still <div>, but from domDocument has been changed to span
// how to force apply?
}
}
}]);
您可以为指令应用模板,并且有替换标志,它会删除旧的指令元素并将模板插入为 $element[0]
。
return {
replace: true,
template: '<span></span>',
restrict: 'A',
//...
};
也许您需要做的就是使用指令 ngTest
?
div[ng-test] {
display: inline;
}
但是如果你真的有充分的理由将div
替换为span
,你可以这样做:
var el = angular.element(document.createElement('span'));
el.attr('ng-test', '').html($element.html());
$element.replaceWith(el);
$compile(el)($scope);
$element = el;
请注意,您不能只替换 outerHTML
。您需要正确设置内部内容,设置属性(它是 ng-test
,而不是 ngTest
),用新的 span 替换旧的 div 并编译它。