将新元素作为指令的默认元素应用
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?
}
}
}]);
也许您需要做的就是使用 指令 ngTest
为div 设置内联样式?
div[ng-test] {
display: inline;
}
但是如果你真的有充分的理由用span
替换div
,你可以这样做:
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
您可以为指令应用模板,并且有替换标志,它删除旧的指令元素并插入模板作为$element[0]
。
return {
replace: true,
template: '<span></span>',
restrict: 'A',
//...
};
相关文章:
- 指令的模板必须只有一个根元素:With restrict E&替换true
- 在元素指令上添加 css
- replace:true 如何与元素指令一起使用
- 防损层,从角度元素指令传递属性指令
- 角度:在元素指令上添加属性指令
- 如何在 angularjs 中验证元素指令
- 删除对象时执行元素指令动画的角度方式
- 从元素指令中的路由提供程序获取参数
- 基于会话服务的隐藏/显示元素指令-AngularJS
- AngularJS:从控制器中访问元素指令的属性
- 自定义元素指令和属性
- 如何在元素指令上使用ng-if来有条件地调用模块
- 将属性指令传递给元素指令
- 如何在AngularJS中以编程方式计算HTML元素(指令)的属性名
- 正在包装集合指令中元素指令的模板
- 无法正确使用元素指令
- Angularjs嵌套元素指令
- 使用 AngularJS 在选择元素指令中触发消息“onfocusleave”的“console.log”
- Angular自定义元素指令没有显示在屏幕上
- 带ng-init的AngularJS元素指令在视图渲染之前运行