2016-06-22 17 views
0

Entschuldigung, ich weiß nicht, wie ich die Frage formulieren soll. Ich weiß, dass es sich um eine Art Problem handelt. Aber ist das, was ich versuche zu erreichen, nicht möglich?Wie kann ich auf ein Konstruktormember innerhalb einer Konstruktorfunktion zugreifen?

app.factory('SystemStatusConnectionFactory', ['$timeout', '$q', 'SystemStatusFactory', 'SystemStatusOptionsFactory', 
function ($timeout, $q, SystemStatusFactory, SystemStatusOptionsFactory) { 

    var self = this; 

    var SystemStatusConnectionFactory = function (ip, user, pw, options) { 
     this.data = { 
      count: 0 
     }; 

    this.PollIP = function() { 
     console.log(this.data.count); //WORKS 
     $timeout(function() { 
      console.log(self.data.count); //DOES NOT WORK 
      console.log(this.data.count); //DOES NOT WORK 
     }, 1000); 
    } 
    }; 
... etc 
+1

beseitigen Sie setzen "self = this" in den falschen Bereich. Es sollte in den Konstruktor gehen. – Bergi

+0

Ein bisschen richtige Einrückung würde helfen, solche Probleme zu erkennen. – Bergi

+0

@Bergi Seufzer, der funktioniert hat. danke – user1189352

Antwort

0

Es ist schwer, genau zu wissen, was los ist, ohne mehr von Ihrem Code zu sehen.

Wenn Sie dies mit Ihren Funktionen verbinden, können Sie sicherstellen, dass sich dies auf den Kontext bezieht, den Sie möchten.

app.factory('SystemStatusConnectionFactory', ['$timeout', '$q', 'SystemStatusFactory', 'SystemStatusOptionsFactory', 
(function ($timeout, $q, SystemStatusFactory, SystemStatusOptionsFactory) { 

    var self = this; //this is now pointing to 'app' 

    var SystemStatusConnectionFactory = (function (ip, user, pw, options) { 

     this.data = { // this is now pointing to app as well. 
      count: 0 
     }; 

     this.PollIP = function() { 
      $timeout(function() { 
       console.log(self.data.count); // Self points to app. 
       console.log(this.data.count); // This points to the window object 
      }, 1000); 
     } 
    }).bind(this); 
}).bind(app) // Use bind to set app as the context of the function or 'this' 

** Ich mache die Annahme, man ‚dies‘ will App beziehen **

+0

danke für die Beschreibung. das funktioniert technisch, aber einfach nur das var self setzen = das im Konstruktor wie von Bergi erwähnt funktioniert – user1189352

+1

Nein, 'this' bezieht sich nie auf irgendeine Funktion. – Bergi

+0

Ja, Sie haben Recht. Ich habe es nicht richtig erklärt. Ich werde meine Antwort bearbeiten. – Dan

1

Nicht sicher, ob Sie dies bereits aus den Kommentaren gelöst (weil ich sehe nicht, warum das shouldn‘ t Arbeit an erster Stelle), aber haben Sie versucht, die bind() Funktion auf dem Funktionsparameter dieses Timeouts zu verwenden? Dies würde die Notwendigkeit der Verwendung der var self = this

// ... 
this.PollIP = function() { 
     console.log(this.data.count); 
     $timeout(function() { 
      console.log(self.data.count); 
      console.log(this.data.count); 
     }.bind(this), 1000); // modified line 
    } 
// ... 
Verwandte Themen