我有一個簡單的指令external-link
導致它被放置在一個單獨的窗口,而不是當前angularjs + ui.router:指令控制器和鏈路功能
<a app-external-link href="http://example.com">Example</a>
打開URL鏈接之間不同的行爲它像target="_blank"
但追蹤使用者在其上
對於這個例子的目的點擊的能力,我刪除了跟蹤功能,因此只需要表現得像在target=_blank
屬性
angular.module('app', [])
.directive('appExternalLink', function ($window) {
var link = function (scope, element, attrs) {
element.on('click', function (event) {
event.preventDefault();
$window.open(attrs.href, '_blank');
});
};
return {
scope: true,
link: link
};
});
此實現按預期工作。讓我吃驚的是,在我的 第一種方法我用指令的控制器:
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()
什麼也不做在這種情況下
爲什麼發生這種情況的任何想法?
更新:
當指令與ui-sref
<a app-external-link ui-sref="foo">Example</a>
什麼版本的角? – CShark
我想知道,因爲我不能刪除'preventDefault'而無法重現您的問題。另外,如果你讓'href'爲空,並且只需將URL從一個不同的屬性傳遞給你的指令,那麼你甚至不必使用'preventDefault',因爲[angular處理這個](https://docs.angularjs.org/ api/ng/directive/a),因爲它 「修改html標記的默認行爲,以便在href屬性爲空時阻止默認操作」 – CShark
@CShark我正在使用版本1.5.3我可以我不會在笨重地重現它,但我會在我的項目中做。所以我需要仔細研究這個問題。替代屬性方法也是一個好主意。謝謝! –