8

我要做的就是在链接到外部站点的部分的 html 中包含一个锚标记。如果是这个标准的 html,那么代码就是:

<a href="http://www.google.com" target="_blank">google</a>

就这么简单,我似乎找不到一个可行的解决方案来通过角度拦截路线(或者可能无意中用https://docs.angularjs.org/api/ng/directive/a指令替换我的锚?) .

我已经搜索了 SO 和网络的其他部分,并看到了无数的解决方案来处理:同一域内的链接、SPA 内的路由、页面内的路由(ala $anchorScroll)但这些都不是我的问题。

我怀疑这可能与使用 $sce 有关,但我是 Angular n00b 并且不确定如何正确使用该服务。我在视图控制器中尝试了以下操作:

$scope.trustUrl = function(url) {
    return $sce.trustAsResourceUrl(url);
}

与相应的:

<a ng-href="{{ trustUrl(item) }}">Click me!</a>

(如此处所述:在 angularjs 模板中绑定外部 URL

但这似乎并没有奏效(我最终在呈现的页面中只得到了 href="{{" )。

使用这样的普通香草锚链接:

<a href="http://www.google.com">google</a>

也未能做到这一点(即使一些在线建议标准href会导致完整的页面重新加载角度:AngularJS - How can I do a redirect with a full page load?)。

我也尝试添加 target=_self" 属性,但这似乎也没有效果。

我是否需要按照此处所述编写自定义指令?

有条件地将 target="_blank" 添加到与 Angular JS 的链接

对于这样一个简单的动作来说,这一切似乎都太复杂了,我觉得我在我的 n00bishness 中遗漏了一些明显的东西,至少我希望如此,因为这个过程感觉非常繁重,只是为了链接到另一个 url。

提前感谢任何解决方案、建议、参考或方向。

4

1 回答 1

8

事实证明,我确实将页面中的所有锚链接绑定到事件侦听器并被覆盖。由于该代码是页面工作方式的基础,我不想弄乱它。相反,我通过使用 ng-click 绕过它来调用新的 url,如下所示:

HTML:

<a class="navLinkHcp" href="{{hcpurl}}" title="Habitat Conservation Plan" target="_blank" ng-click="linkModelFunc(hcpurl)">Habitat Conservation Plan</a>

控制器:

$scope.hcpurl = 'http://eahcp.org/index.php/about_eahcp/covered_species';

$scope.linkModelFunc = function (url){
  console.log('link model function');
  $window.open(url);
}

瞧!很好走。再次感谢 KevinB 告诉我这可能是问题所在。

于 2014-06-30T00:14:08.353 回答