2013-08-21 13 views
13

Ich erstelle gerade eine neue Eigenschaft in $ rootScope und setze ihren Wert in einem Modul.

$rootScope.test = 123; 

Ich versuche dann, diesen Wert später in einer Service-Funktion zu referenzieren.

.factory("testFactory", function ($location, $http, $rootScope) { 
    /* .... */ 
    return { 
     testFunction : function(){ 
      console.log($rootScope); 
      console.log($rootScope.test); 
     }, 
     /* .... */ 

Wenn ich die Konsolenausgabe in Chrome zu sehen, kann ich sehen, dass der Wert des Tests ordnungsgemäß in dem Objekt $ rootScope gesetzt wird, aber ich bin nicht in der Lage, die $ rootScope.test Syntax Referenz. $ rooScope.test gibt einfach undefined zurück.

Gibt es einen Grund, warum Sie nicht auf Eigenschaftswerte von $ rootScope in Diensten verweisen können? Oder versuche ich diesen Wert nicht korrekt abzurufen?


UPDATE - Ich habe eine Plunker geschaffen, der das Problem demonstriert, dass ich in laufen lasse. http://plnkr.co/edit/ePEiYh

+0

Wie wäre es versucht, '.factory ("Testfactory", [ "$ location", "$ http", $ rootScope ", Funktion ($ location, $ http, $ rootScope) {...}];' – tymeJV

+1

Stellen Sie sicher, dass Sie '$ rootScope.test = 123;' ausführen, bevor Sie 'testFactory.testFunction();' – AlwaysALearner

+0

Wie haben Sie das gelöst? Ich habe genau das gleiche Problem.In der Konsole kann ich das Attribut in der ersten console.log sehen, aber in der zweiten, wenn ich versuche, das Attribut selbst zu drucken, kommt es als undefined –

Antwort

9

Dies sollte gut funktionieren:

var myApp = angular.module("myApp", []); 

myApp.run(['$rootScope', function($rootScope){ 
    $rootScope.test = 123; 
}]); 

myApp.controller('AppController', ['$rootScope', function ($rootScope) { 
    console.log($rootScope.test); 
}]); 

Plunker: http://plnkr.co/edit/7NTGOK

Ich denke, dass Sie der Wert zu lesen, bevor Sie sind Schreiben es. Könnten Sie mehr Code teilen?

UPDATE

Die Debug-Erfahrung ist hier wirklich seltsam. Doch meiner aktualisiert Plunker können Sie die Zeitstempel sehen, durch die das Schreiben nach dem Lesen geschieht:

http://plnkr.co/edit/pn5Wxk

+0

Leider konnte ich kein Bild posten, aber in meiner Chrome-Konsole, wenn ich zuerst console.log ($ rootScope) ausdrucke und das Objekt expandiere, sehe ich "test: 123" definiert. Nach dieser Zeile drucke ich console.log ($ rootscope.test) und es erscheint als undefiniert. Wie kann ich den Wert im Protokoll mit $ rootScope sehen, aber nicht als $ rootScope.test? – ral8

+1

Klingt seltsam, aber es gibt immer einen Grund :) Können Sie versuchen, einen kleinen Testfall in einem Plunkr zusammenzustellen? Oder hast du deine App irgendwo online verfügbar? – Christoph

+0

Ich habe die ursprüngliche Frage bearbeitet und den Plunker-Link hinzugefügt. – ral8