2016-03-25 12 views
0

Ich versuche, eine globale für meine gesamte App festzulegen. Aber es funktioniert nicht. Hier deklariere ich meine Globals:AngularJs setzen eine globale

(function() { 
    angular.module('employeeApp') 
     .controller('authenticationController', authenticationController) 
     .constant('GLOBALS', { 
      url:'http://skindustries.dev/api/v1/', 
      role:'', 
      companyid:'', 
      name:'' 
     }); 

Dann, wenn ein Mitarbeiter mich anmeldet, möchte ich Globals setzen.

function authenticationController(requestFactory,authenticationFactory,GLOBALS,$location,$cookieStore) 
    { 
    var vm = this; 

     vm.login = function() { 
      data = {"email": vm.email, "password": vm.password}; 
      requestFactory.post(GLOBALS.url + 'login', data) 
       .then(function (response) { 
        console.log(response); 
        GLOBALS.role = response.data.result.Employee.Role; 
        GLOBALS.companyid = response.data.result.Employee.CompanyId; 
        authenticationFactory.setToken(response.data.result.Employee.api_token); 
        $cookieStore.put('employeeid', response.data.result.Employee.EmployeeId); 
        $location.path('/home'); 

       }, function() { 
        console.log('Niet ingelogd!'); 
       }); 
      } 
     } 

Wenn ich console.log(GLOBALS.role) in authenticationController Ergebnis superadministrator ist. Dann wird der Benutzer nach Hause umgeleitet. Wenn ich console.log(GLOBALS.role) in meinem homeController.

(function() 
{ 
    angular.module('employeeApp').controller('homeController', homeController); 

    function homeController(employeeFactory,GLOBALS) { 
     console.log(GLOBALS.role); 

Ergebnis ist null?

Was mache ich hier falsch?

--EDIT--

Konstante (Service)

(function() { 
    angular.module('employeeApp') 
     .service('constants',constants); 

    function constants() { 
     this.url = 'http://skindustries.dev/api/v1/'; 
      this.role = 'oldRole', 
      this.companyid = '', 
      this.name = '' 
    } 
})(); 

Login (Fabrik)

factory.login = function(email,password) 
     { 
      console.log('login'); 
      data = {"email": email, "password": password}; 
      requestFactory.post(GLOBALS.url + 'login', data) 
       .then(function (response) { 
        constants.role = response.data.result.Employee.Role; 
        constants.companyid = response.data.result.Employee.CompanyId; 
        factory.setToken(response.data.result.Employee.api_token); 
        $cookieStore.put('employeeid', response.data.result.Employee.EmployeeId); 
        $location.path('/home'); 

       }, function() { 
        console.log('Niet ingelogd!'); 
       }); 
     } 

Homecontroller

+0

Haben Sie überprüft, ob 'GLOBALS' als Winkelkonstante registriert wird, bevor" homeController "ausgeführt wird? – nalinc

+0

Ja, ich habe das überprüft! – Jamie

+0

Ich empfehle Ihnen, einen Blick auf diesen Blogbeitrag zu werfen, der sich mit Auth befasst: http://www.jvandemo.com/learn-how-to-make-authentication-in-your-angular-applications-simpler-and-more -consistent/ –

Antwort

2

Grundsätzlich Wert (oder eine Konstante) initialisiert jedes Mal, wenn es in einem Steuergerät eingespritzt wird. So behält es nie Ihren neuen Wert und initialisiert somit seinen alten Wert.

für Ihren Bedarf könnten Sie ein service als globales Objekt in Ihrer Anwendung verwenden, so dass es Ihren neuen gespeicherten Wert im GLOBAL Objekt behält

Demo Fiddle

.service('GLOBALS', function() { 
     this.url = 'http://skindustries.dev/api/v1/'; 
     this.role = 'oldRole', 
     this.companyid = '', 
     this.name = '' 
    }) 

.controller('MyController', function(GLOBALS, $scope) { 
    console.log(GLOBALS.role); 
    $scope.role = GLOBALS.role; 
    GLOBALS.role = "new role"; 
    console.log(GLOBALS.role); 
}) 

.controller('MyController2', function(GLOBALS, $scope) { 
    console.log(GLOBALS.role); 
    $scope.role = GLOBALS.role; 
}); 

Zum besseren Verständnis von Konstanten und Werte beziehen sich diese question

Hoffe das hilft.

+0

Danke, aber wenn ich das versuche und die Seite neu lade, ist die Rolle weg. Bitte sehen Sie meine Bearbeitung. – Jamie

+0

Offensichtlich @ Jamie die bearbeitete Rolle wird weg sein, weil es nicht in der Sitzung oder einer externen DataBase gespeichert ist. Wenn Sie möchten, dass Ihre geänderten GLOBAL-Werte gespeichert werden, sollten Sie localStorage (dh browserspezifisch) oder eine Datenbank zum Speichern Ihrer Daten verwenden. –

+0

Und wäre es falsch, dies in einem Cookie zu speichern? – Jamie

-1

Eine Konstante kann von einem Dekorator nicht abgefangen werden, dh der Wert einer Konstante sollte niemals verändert werden.

Gebrauchswert:

angular.module('app', []); 

.value('GLOBALS', 'The Matrix'); 

.controller('MyController', function (GLOBALS) { 
    GLOBALS = "hello"; 
}) 
Verwandte Themen