指令コントローラとリンク機能の間で異なる動作ユーザーは、それが唯一のtarget=_blank
属性angularjs + ui.router:私は代わりに現在</p> <pre><code><a app-external-link href="http://example.com">Example</a> </code></pre><p>の別のウィンドウにURLを開くように配置されたリンクを引き起こす単純な指令<code>external-link</code>を有する
をクリックしたとき、それはtarget="_blank"
ようですが、追跡する機能であります
この実装は、期待通りに機能します。なぜ(したがって、この質問)私は理解していない
angular.module('app', [])
.directive('appExternalLink', function ($window) {
var controller = function ($element, $attrs) {
$element.on('click', function (event) {
event.preventDefault();
$window.open($attrs.href, '_blank');
});
};
return {
scope: true,
controller: controller
};
});
ディレクティブコントローラ の例では、リンクが正常に新しいウィンドウで開きますが、:どのような私を驚かせたことは、私の 最初のアプローチでは、私はディレクティブのコントローラーを使用していたということですそれはまた、 は新しいURL
それはevent.preventDefault()
この場合
これがなぜ起こるか上の任意のアイデアで何もしないかのようである現在のビューを変更しますか?
更新:
ディレクティブは、私は2つの潜在的な解決策を持っているui-sref
<a app-external-link ui-sref="foo">Example</a>
どの角度の角度ですか? – CShark
'preventDefault'を削除せずに問題を再現できなかったので私は不思議でした。また、 'href'を空のままにして別の属性からあなたのディレクティブにurlを渡すだけなら、[angular handles this](https://docs.angularjs.org/)があるので、' preventDefault'を使う必要はありません。それは "href属性が空のときにデフォルトアクションが防止されるようにhtmlタグのデフォルト動作を変更します" – CShark
@CShark私はバージョン1.5.3を使用しています。それは大したことではありませんが、私は自分のプロジェクトでやっています。ですから、私は問題を詳しく見ていく必要があります。代替属性アプローチも良い考えです。どうも! –