我的信息中心是一个包含许多图块的网格,每个图块都有一个指向不同页面的链接。
每次点击链接时,它都会为之前打开的链接创建一个新标签。
**如何使用Angular禁止打开已在浏览器中打开的链接的新标签?
注意:外部链接不应在当前打开仪表板的选项卡上打开**
我在我的脚本文件中使用了以下代码
$scope.openInNewWindow = function(url, $event) {
$window.open(url);
$event.preventDefault();
}
而且,我称之为:
<a class="ui-button ui-button-stretch" ng-href="{{link.url}}" ng-click="openInNewWindow(link.url, $event)">
答案 0 :(得分:1)
在vanilla HTML中,如果您始终为同一选项卡中包含的每个链接提供相同的target
(不计算“_blank”)属性,则应始终位于相同的选项卡/窗口中(如果用户尚未关闭它)。如果他们离开该选项卡/窗口然后再次单击该链接,则可能会出现问题 - 他们可能不会注意到旧的选项卡/窗口重新加载内容,具体取决于浏览器如何处理链接的加载/聚焦。
除了那个问题...在脚本中使用target =“_ blank”或window.open()不是你想要做的......你想使用像target =“resource1”,target =“resource2这样的东西“对于您希望保留在自己的标签/窗口中的每个唯一网址。
您可以根据自己的目标使用此功能。
使用Angular,您可能希望使用指令...并可能删除ng-click属性。可能的例子改编自(Conditionally add target="_blank" to links with Angular JS)塞巴斯蒂安对类似主题的回答:
module.directive('myTarget', function () {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var href = element.href;
if(href == "/resource1.html") { // replace with your conditions to match your urls
element.attr("target", "resource1");
else if( href == "/resource2.html")
element.attr("target", "resource2"); // etc.
}
}
};
});
用法:
<a href="/resource1.html" my-target>Link</a>