我想将target =“_ blank”添加到通过linky过滤器的HTML片段中。也就是说,我需要在内容完全呈现后,后处理DOM 。在AngularJS中后处理DOM
看到这个jsFiddle。
http://jsfiddle.net/ADukg/410/
我怀疑这是周围的指令的优先级的东西,但改变的是至今还没有帮助。
我想将target =“_ blank”添加到通过linky过滤器的HTML片段中。也就是说,我需要在内容完全呈现后,后处理DOM 。在AngularJS中后处理DOM
看到这个jsFiddle。
http://jsfiddle.net/ADukg/410/
我怀疑这是周围的指令的优先级的东西,但改变的是至今还没有帮助。
问题是,linky过滤器会在评估指令后添加'a'标签,而element.find('a')找不到任何东西。
我认为最好的解决方案是编写自己的url过滤器,然后调用linky过滤器并且不使用指令。
更新
我创建了一个的jsfiddle还有: http://jsfiddle.net/jomikr/ADukg/420/
你可以用setTimeout来做到这一点,比如this。即使时间为0,它也只会在角度完成处理后才运行。
angular-sanitize.js
writer.start('a', {href:url, target:'_blank'});
Alert - linky会将目标_blank添加到每个链接,现在!
我不认为改变你依赖的库的来源是个好主意。 – 2013-05-07 15:04:52
以及在控制器中使用某个功能的情况。
我在控制器中使用这样的:
$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)}}">
...
赫南回答运作良好,但不会对已页面加载后增加了环节的工作。
如果您需要添加_target空白,以新的链接,请尝试使用过滤器的手表事件:
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>
我其实什么做的是这样的:我实现了一个过滤器,在linky的结果中用' href/gi。在HTML上使用正则表达式有点不方便,但是迄今为止最简单的方法。 – 2012-08-02 12:50:14
当然也适用 - 并且没有让DOM节点获得字符串的有些丑陋的东西。只是为了澄清:过滤器总是应用在指令之后。所以改变这里的优先顺序并没有帮助。 – jokr 2012-08-02 12:58:29