2016-05-02 8 views
0

Ich versuche, globale Variablen aus einer Datei in einer anderen Datei zu verwenden. Ich habe es von der ursprünglichen Datei (controller.js) in die HTML-Datei arbeiten, aber ich kann es nicht von der controller.js zu der service.js arbeiten.Verwendung von Globals in angularjs

Ich bin ziemlich neu bei eckigen und versuchen, dies herauszufinden.

+1

Ohne Code und eine klare Beschreibung des Problems, ist es unmöglich zu beantworten. Aber du solltest das sowieso nicht tun. Globals sind böse. Verwenden Sie, was Angular bereitstellt, um Informationen zwischen Komponenten zu teilen: Dienste. –

+0

Ich weiß, Globals sind böse. Ich versuche, sie um jeden Preis zu vermeiden. Aber was ich versuche, ist eine Funktion vom Server zu rufen und basierend auf den Informationen, die ich zurückbekomme, möchte ich einen Ionen-Gegenstand zeigen oder verstecken. Ich benutze ng-show, um es von der Controller.js Datei arbeiten zu lassen, aber ich möchte die Funktion von services.js aufrufen. Was ist der beste Weg, dies mit out Globals zu erreichen? –

+0

Aus dem angularJS Tutorial https://docs.angularjs.org/tutorial/step_05 –

Antwort

3

Es scheint, dass Sie eine Variable in Ihrem Controller deklarieren möchten, damit Ihr Dienst Daten in diese Variable schreiben kann. Sie müssen sich über es anders herum, vorbei an den Dienst zu dem Controller durch Dependency Injection

app.controller('homeCtrl', function($scope, myServiceIsNowInjected){ 

}) 

und dann Aufruf einer Methode auf diesen Dienst in der Steuerung denken:

myServiceIsNowInjected.getDataFromServer('my param'); 

Sie werden dann Begegnung Das Problem, dass Daten von einem Server abgerufen werden, ist asynchron. Daher müssen Sie Winkelversprechungen verwenden, damit Sie das Ergebnis einer Variablen in Ihrem Bereich zuweisen können, wenn die Daten empfangen werden. Die obige, nach wie vor in Ihrem Controller werden:

myServiceIsNowInjected.getDataFromServer('my param').then(function(data){ 
    $scope.viewvar = data;  
}, function(err){ console.log(err) }); 

Auf diese Weise eher als eine globale Variable für den Dienst in den Dienst Leiten der Daten auf diese Variable zu schreiben, anstatt Sie den Dienst stellen eine bestimmte Aufgabe zu erfüllen , und der Controller schreibt das Ergebnis dieser Aufgabe in den $ scope und stellt ihn der Ansicht zur Verfügung.

Eine vollständige Lösung Beispiel von genau dies ist wie erwähnt here.

$rootScope sollte nicht für diese Art der Sache verwendet werden - es wird Ihnen Probleme verursachen wie Ihre Anwendung wächst, während modulare Steuerungen verwendet, die Informationen von Dienstleistungen ziehen nicht.

+0

Vielen Dank das ist genau das, was ich gesucht habe. –

0

Eine Option ist die Verwendung von $ rootScope.

In einem Controller definieren Sie:

$rootScope.variable = 'your value'; 

Und dann, in einem Dienst oder einem anderen Controller Sie es verwenden:

Console.log($rootScope.variable); 

Erinnern Sie sich die $ rootScope injizieren (wie Sie mit $ scope machen) in der Controller/Service-Definition.

+0

wenn Sie sagen, injizieren Sie so etwas wie diese Funktion GetWebsiteSetting ($ Umfang, bzw., $ rootScope) bedeuten { –

+0

Wo Sie den Controller definieren: angular.module ('app.controllers', []) .Controller (‘ TestCtrl ', Funktion ($ scope, ** $ rootScope **) { ... }); –

+0

ok ja das habe ich gemacht. Mein Controller sieht jetzt so aus. .controller ("StartpageCtrl", Funktion ($ rootScope, $ scope) { $ scope.showstartCard = true; $ rootScope.variable = "Ihre Variable"; }); und in meiner Service-Seite heißt es nicht finden Variable von undefined –

Verwandte Themen