Ich bin neu in AngularJs. Zur Zeit habe ich eine Direktive, die ein JavaScript-Objekt namens keyListeners
auffüllt. Jetzt wird dieses Objekt gefüllt und erfüllt seinen Zweck, wenn ich das erste Mal auf die Seite komme, auf der es verwendet wird. Leider, wenn ich navigieren weg von der Seite und kommen dann zurück, um es ich sehe Fehler in meiner Konsole wieAngularJS - Notwendigkeit, Javascript-Objekt auf Controller-Änderung zu löschen
„angular.min.js: 116 Mehr als ein amtAltKey für Schlüssel‚A‘gefunden“
Dann beginnt die Funktionalität der Seite zu brechen.
Ich weiß, ich könnte theoretisch für die Existenz des Elements in keyListeners überprüfen, bevor Sie es zum Objekt hinzufügen. Anstatt dies zu tun, möchte ich jedoch einige Logik ausführen, um keyListeners über Steueränderungen zu löschen. Meine Direktive, die keyListeners tatsächlich füllt, ist unten. Wie kann ich dies bei jedem Wechsel des Controllers/der Seite löschen?
app.directive("amtAltKey", function() {
return {
link: function (scope, elem, attrs) {
var altKey = attrs.amtAltKey.toUpperCase();
if(keyListeners[altKey] !== undefined) { throw 'More than one amtAltKey found for key \''+ altKey + '\''; }
if (altKey === '') { throw "Alt Key value key must be given"; }
var el = elem[0];
if (!el.hasChildNodes()) { throw 'amtAltKey element must have child text'; }
if(el.firstChild.nodeName !== '#text') { throw 'amtAltKey element\'s child must be text'; }
var text = el.innerText;
var textUpper = text.toUpperCase();
var indexOfKey = textUpper.indexOf(altKey);
if (indexOfKey === -1) { throw 'amtAltKey for \'' + altKey + '\' was not found in element\s text; ' + text; }
var newText = text.replace(new RegExp(attrs.amtAltKey), '<u>' + attrs.amtAltKey + '</u>');
el.innerHTML = newText;
keyListeners[altKey] = el;
}
};
});
In Bezug auf das Hinzufügen zu der Richtlinie, glaube ich das Problem dort ist, dass dies auf jedem Element ausgeführt wird, das ich mit einem amt-alt-key-Attribut markiert habe. Jeder von diesen möchte ich zu keyListeners {} hinzufügen. Deshalb kann ich es am Anfang der Richtlinie nicht klarstellen. --Jason –
OK. Dann möchten Sie einen Dienst oder eine Fabrik zwischen ihnen teilen (zweites Beispiel oben). Die hinzugefügten Elemente bleiben auch nach dem Erlöschen der Direktive bestehen, so dass Sie sie als Reaktion auf Ihre Router löschen oder persistieren können. – oooyaya