Ich habe eine einfache Richtlinie external-link
verursacht die Verbindung, in der sie platziert wird die URL in einem separaten Fenster zu öffnen statt der aktuellenAngularJS + ui.router: unterschiedliches Verhalten zwischen Richtlinie Controller und Verknüpfungsfunktionen
<a app-external-link href="http://example.com">Example</a>
es ist wie target="_blank"
aber mit der Fähigkeit, wenn Benutzer darauf klicken zu verfolgen
aus Gründen des Beispiels mir die Tracking-Funktion entfernt, so dass es nur wie das target=_blank
Attribut verhalten hat
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
};
});
Diese Implementierung funktioniert wie erwartet. Was ich überraschte, ist, dass in meinem ersten Ansatz war ich Richtlinie des Controller:
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
};
});
Ich verstehe nicht, warum (daher diese Frage) in der Richtlinie Controller Beispiel die Verbindung erfolgreich in einem neuen Fenster öffnet, aber es ändert sich auch die aktuelle Ansicht auf die neue uRL
es ist, als ob event.preventDefault()
tut nichts in diesem Fall
Alle Ideen, warum dies geschieht?
Update:
Das Problem tritt nur auf, wenn die Richtlinie mit ui-sref
<a app-external-link ui-sref="foo">Example</a>
Welche Version von eckigen? – CShark
Ich habe mich gefragt, weil ich Ihr Problem nicht reproduzieren konnte, ohne "preventDefault" zu entfernen. Wenn Sie 'href' leer lassen und die URL nur aus einem anderen Attribut in Ihre Anweisung übergeben, müssen Sie nicht einmal' preventDefault' verwenden, da [angular handys this] (https://docs.angularjs.org/ api/ng/directive/a), seit es "Ändert das Standardverhalten des HTML-Tags, so dass die Standardaktion verhindert wird, wenn das href-Attribut leer ist" – CShark
@CShark Ich benutze Version 1.5.3 Ich kann Wiederhole es nicht in einem Plunk, aber ich mache es in meinem Projekt. Also muss ich das Problem näher betrachten. Der alternative Attributansatz ist ebenfalls eine gute Idee. Danke! –