2012-07-30 69 views

回答

3

问题是,linky过滤器会在评估指令后添加'a'标签,而element.find('a')找不到任何东西。

我认为最好的解决方案是编写自己的url过滤器,然后调用linky过滤器并且不使用指令。

更新

我创建了一个的jsfiddle还有: http://jsfiddle.net/jomikr/ADukg/420/

4

你可以用setTimeout来做到这一点,比如this。即使时间为0,它也只会在角度完成处理后才运行。

1
  1. 打开文件angular-sanitize.js
  2. 转到线525
  3. 将其更改为writer.start('a', {href:url, target:'_blank'});

Alert - linky会将目标_blank添加到每个链接,现在!

+1

我不认为改变你依赖的库的来源是个好主意。 – 2013-05-07 15:04:52

0

以及在控制器中使用某个功能的情况。

我在控制器中使用这样的:

$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)}}"> 
... 
1

赫南回答运作良好,但不会对已页面加载后增加了环节的工作。

如果您需要添加_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>