私はAngularJsを初めて使用しています。現在私は、keyListeners
というJavaScriptオブジェクトに値を設定する命令を持っています。このオブジェクトは、使用されたページに初めてアクセスしたときに、そのオブジェクトに値が設定され、その目的がうまく機能します。残念ながら、私はページから移動して、それに戻って、私はAngularJS - コントローラの変更時にJavaScriptオブジェクトを消去する必要があります
ように私のコンソールにエラーが表示来るとき「angular.min.js:116複数のamtAltKeyがキー 『A』が見つかり、」
ページの機能が中断し始めます。
私は理論的に、オブジェクトにオブジェクトを追加する前に、keyListeners内の要素の存在をチェックすることができます。しかし、これを行う代わりに、コントロールの変更時にkeyListenersをクリアするロジックを実行したいと思います。 keyListenersを実際に設定するディレクティブは以下のとおりです。コントローラ/ページが変更されるたびに、これをどのようにクリアすることができますか?
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;
}
};
});
ディレクティブに追加する点では、amt-alt-key属性でマークした各要素でこの問題が発生することがあります。これらのそれぞれをkeyListeners {}に追加します。ですから、指示の始めにそれをクリアすることはできません。 --Jason –
OK。次に、それらの間でサービスや工場を共有したいとします(上記の2番目の例)。これに追加された項目は、ディレクティブがなくなっても有効になりますので、ルータに応じて好きなようにクリアまたは永続化することができます。 – oooyaya