Ich bin mit einem sehr seltsamen Problem mit Variablen in einem Controller von einem anderen Controller entführt. Hier sind die Details:angularjs: Controller Hijacking eine andere Controller-Variable
In meinem HTML habe ich zwei ng-View-Tags. Jedes Tag führt zu einem TemplateURL (einem HTML), das seinen eigenen entsprechenden Controller hat. Ctrl1 und Ctrl2
die beiden ng-Ansichten sind auf der gleichen Ebene in der HTML-Hierarchie - das heißt, man ist nicht das Kind eines anderen
Controller1 sieht wie folgt aus:
ngEpMod.controller('Ctrl1',[function() {
selfX = this;
abc = 'abc controller1';
console.log(abc); // break point 1
selfX.query = function() {
console.log("abc=");
console.log(abc); // break point 2
console.log("search query=");
console.log(selfX.searchQ);
lySP.searchHomes();
};
}]);
Controller2 Aussehen wie folgt:
Beide Controller sind im HTML-Code mit einer "Controller as" -Syntax verknüpft.
Die Abfrage() -Methode in Ctrl1 wird ausgelöst, wenn Benutzer Benutzer auf eine Schaltfläche klickt (ng-Klick)
Mystery: Als ich die HTML-Seite ($ state) laden, die die beiden ng-Ansichten hat, wie ich bin Beobachtung der Browser-Konsole. Ich bemerke, dass der abc-Wert in break-point1 "abc controller1" ist, aber wenn die query() -Methode ausgelöst wird, ändert sie sich mysteriös in "abc controller2". Es gibt keine globale Variable mit diesem Namen! Wie ich es verstehe, wird beim Anlegen der Seite zuerst Ctrl1 erzeugt, also an Breakpoint 1 hat abc den richtigen Wert, dann wird Ctrl2 erzeugt und irgendwie high-bucht die abc-Variable! Fremder ist sogar, dass ich dieses Problem zuerst mit meiner Selbstvariable bemerkte (self = das) und dann führte ich abc nur für zusätzliche Überprüfung ein
Gurus, ich bin ein Neuling und würde Ihre Hilfe wirklich schätzen.
Danke Ori - Ich habe gerade var zu abc hinzugefügt und das hat funktioniert! Ich bin so ein Dummy - der Nachteil der Codierung ohne genügend JavaScript-Kenntnisse. – hpep
Keine Sorge. Lesen Sie über ['use strict'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode) und verwenden Sie es. Es wird dir helfen, Fehler zu finden und dir beibringen, was du nicht tun sollst. Lesen Sie außerdem [Javascript die guten Teile] (http://bdcampbell.net/javascript/book/javascript_the_good_parts.pdf) Buch. –