2016-03-25 4 views
0

Я пытаюсь установить глобальное для всего моего приложения. Но это не работает. Здесь я объявляю свои глобальные перемены:AngularJs установить глобальный

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

Затем, когда сотрудник подписывается, я хочу установить глобальные переменные.

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!'); 
       }); 
      } 
     } 

Если я console.log(GLOBALS.role) в authenticationController результат superadministrator. Затем пользователь перенаправляется на родину. Если я console.log(GLOBALS.role) в моем homeController.

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

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

Результат: null?

Что я здесь делаю неправильно?

--EDIT--

постоянная (услуга)

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

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

Логин (завод)

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

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

    function homeController(constants) { 
    console.log(constants.role); 
} 
+0

Вы перекрестно проверяли, что 'GLOBALS' регистрируется как угловая константа? Прежде чем« homeController »будет выполнен? – nalinc

+0

Да, я проверил это! – Jamie

+0

Я предлагаю вам взглянуть на это сообщение в блоге, которое касается auth: http://www.jvandemo.com/learn-how-to-make-authentication-in-your-angular-applications-simpler-and-more -consistent/ –

ответ

2

В основном значение (или константа) инициализирует каждый раз, когда он вводится в контроллер. Поэтому он никогда не сохраняет ваше новое значение и, следовательно, инициализирует его старое значение.

Для вашей потребности вы можете использовать service в качестве глобального объекта в приложении, так что она сохраняет свое новое сохраненное значение в GLOBAL объекте

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; 
}); 

Для лучшего понимания констант и значения относятся к этому question

Надеюсь, что это поможет.

+0

Спасибо, но когда я попробую это и перезагрузите страницу, роль уйдет. См. Мое редактирование. – Jamie

+0

Очевидно, что редактируемая роль @jamie исчезнет, ​​потому что она не сохраняется в сеансе или внешней базе данных. Если вы хотите, чтобы ваши измененные значения GLOBAL были сохранены, вы должны использовать localStorage (специфичный для браузера) или базу данных для сохранения ваших данных. –

+0

И было бы неправильно хранить это в cookie? – Jamie

-1

Константа не может быть перехвачена декоратором, это означает, что значение константы никогда не должно изменяться.

Применение Значение:

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

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

.controller('MyController', function (GLOBALS) { 
    GLOBALS = "hello"; 
}) 
Смежные вопросы