2016-07-27 26 views
0

マイダッシュボードは、タイルが多数あり、それぞれのタイルに異なるページへのリンクがあるグリッドです。同じリンクの新しいタブの作成を避ける方法(既にブラウザで開いている)

リンクをクリックするたびに、以前開いたリンクに対しても新しいタブが作成されます。

** Angularを使用してブラウザで既に開いているリンクの新しいタブの表示を抑制するにはどうすればよいですか?

注:外部リンクがダッシュボードは、現在開いているタブを開くべきではありません**私は私のスクリプトファイル

$scope.openInNewWindow = function(url, $event) { 
    $window.open(url); 
    $event.preventDefault(); 
    } 

そして、私が使用してそれを呼び出すには、次のコードを使用している

:バニラのHTMLでは

<a class="ui-button ui-button-stretch" ng-href="{{link.url}}" ng-click="openInNewWindow(link.url, $event)"> 

答えて

1

それぞれがあなたが同じタブに含まれているしようとしているリンクのためにあなたが常に同じtarget(「_blank」をカウントしない)属性を与えるならば、それはshoul dは常に同じタブ/ウィンドウに表示されます(ユーザーが閉じていない場合)。これは、タブ/ウィンドウを離してリンクを再度クリックすると問題になることがあります。ブラウザがリンクの読み込み/フォーカスをどのように処理するかによって、古いタブ/ウィンドウがコンテンツを再読み込みしないことがあります。

スクリプトでtarget = "_ blank"またはwindow.open()を使用している問題は、target = "resource1"、target = "独自のタブ/ウィンドウに残りたいユニークなURLごとに「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> 
+0

私は同意するが、ディレクティブが過剰であると思います。単にtarget = ""をhtmlタグに入れてください。他の開発者にとってはより柔軟で分かりやすいでしょう。 –

+0

@Tom Barstow私は既にリンクオブジェクト(外部のウェブサイトへのリンク)に自分のリンクを格納しています。これはdashboard.html上にあり、ユーザーがリンクをクリックするたびに新しいタブで取得する必要がありますユーザーがもう一度クリックすると(前のタブが開いている場合)、古いタブを再ロードする必要があります。新しいモジュールを導入せずにそれを行うことはできませんか? –

+0

ああ、あなたの最新のコメントを読むのは、すべてのリンクがちょうど1つのタブに行くように聞こえる - 私は、あなたが何個のリソースがロードされているかに依存するx個のタブが必要だと思っていた。 )私の提案はBob Brinksが示唆したもので、 'ng-click =" ... "'を 'target =" myTab "'に置き換えるだけです。 – Tom

関連する問題