AngularJS中DOM的后处理
我想将target=“\u blank”添加到经过linky过滤器的HTML片段中。也就是说,我需要在内容完全呈现后对DOM进行后期处理 看看这个AngularJS中DOM的后处理,angularjs,Angularjs,我想将target=“\u blank”添加到经过linky过滤器的HTML片段中。也就是说,我需要在内容完全呈现后对DOM进行后期处理 看看这个 我怀疑这与指令的优先级有关,但到目前为止,改变这一点并没有帮助。您可以通过设置超时来完成这一点,如。即使时间为0,它也只会在angular完成处理后运行。您可以使用类似的setTimeout来执行此操作。即使时间为0,它也只会在angular完成它的处理后运行。问题是,linky筛选器会在计算指令后添加“a”标记,element.find('a')
我怀疑这与指令的优先级有关,但到目前为止,改变这一点并没有帮助。您可以通过设置超时来完成这一点,如。即使时间为0,它也只会在angular完成处理后运行。您可以使用类似的setTimeout来执行此操作。即使时间为0,它也只会在angular完成它的处理后运行。问题是,linky筛选器会在计算指令后添加“a”标记,element.find('a')不会找到任何内容 我认为最好的解决方案是编写自己的url过滤器,然后调用linky过滤器,而不使用指令 更新 我也为此创建了一个JSFIDLE:
问题在于,在对指令求值后,linky筛选器将添加“a”标记,element.find('a')将找不到任何内容 我认为最好的解决方案是编写自己的url过滤器,然后调用linky过滤器,而不使用指令 更新 我也为此创建了一个JSFIDLE:
angular sanitize.js
writer.start('a',{href:url,target:'u blank'})代码>
angular sanitize.js
writer.start('a',{href:url,target:'u blank'})代码>
警报-linky将立即向每个链接添加target\u blank 那么只在控制器中使用一个函数怎么样 我在控制器中使用这个:
$scope.getTarget = function(isExternal) {
return isExternal ? '_blank' : '';
}
在html中:
<div ng-repeat="slide in slides" data-slider-id="{{$index}}">
<a ng-hide="{{slide.link == ''}}"
href="{{slide.link}}"
target="{{getTarget(slide.isExternal)}}">
...
...
那么在控制器中使用一个函数怎么样
我在控制器中使用这个:
$scope.getTarget = function(isExternal) {
return isExternal ? '_blank' : '';
}
在html中:
<div ng-repeat="slide in slides" data-slider-id="{{$index}}">
<a ng-hide="{{slide.link == ''}}"
href="{{slide.link}}"
target="{{getTarget(slide.isExternal)}}">
...
...
雷南的答案很好,但在页面加载后添加的链接上不起作用
如果需要将_targetblank添加到新链接,请尝试使用带有监视事件的筛选器:
JS
app.directive('targetBlank', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
scope.$watch(attrs.targetBlank, function(){
element.find('a').attr('target', '_blank');
});
}
};
});
HTML
<div ng-bind-html="textModel | linky" target-blank="textModel"></div>
雷南的答案很好,但在页面加载后添加的链接上不起作用 如果需要将_targetblank添加到新链接,请尝试使用带有监视事件的筛选器: JS
app.directive('targetBlank', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
scope.$watch(attrs.targetBlank, function(){
element.find('a').attr('target', '_blank');
});
}
};
});
HTML
<div ng-bind-html="textModel | linky" target-blank="textModel"></div>
我实际做的是:我实现了一个过滤器,将/>a href/gi替换为“当然也可以”,而不需要从DOM节点中获取字符串。只是澄清一下:过滤器总是在指令之后应用。因此,在这里更改优先级顺序没有任何帮助。我实际上做的是:我实现了一个过滤器,将/>a href/gi替换为“当然也可以”,而不需要从DOM节点中获取字符串。只是澄清一下:过滤器总是在指令之后应用。因此,更改优先级顺序没有帮助。我认为更改您所依赖的库的来源不是一个好主意。我认为更改您所依赖的库的来源不是一个好主意。