Как отправить значение переменной из ajax на другой контроллер

Вот мой контроллер:

.controller('loginCtrl', ['$scope',  '$window', '$cookies', '$http', function($scope, $window, $cookies, $http) {
    var frm = $('#loginForm');
    frm.submit(function(ev) {
        var now = new Date();
        now.setTime(now.getTime() + (600000 * 5));
        $.ajax({
            type: frm.attr('method'),
            url: frm.attr('action'),
            //dataType: "json",
            contentType: "application/json",
            data: JSON.stringify(frm.serializeObject()),
            success: function(data, textStatus, request) {
                if (request.status == 202) {
                    $cookies.put('diprLogin', 'admin', {
                        expires: now
                    });
                    $window.location.href = '#';  
                    **var roleValue=data[0].role;**
                    console.log(roleValue);
                    $scope.$apply(function() {
                        $scope.noty.add({
                            type: 'info',
                            title: 'Welcome. Admin'
                        });
                    });
                }
            },
            error: function(jqXHR, textStatus, errorMessage) {
                $scope.$apply(function() {
                    $scope.noty.add({
                        type: 'danger',
                        title: 'Authentication failed',
                        body: 'Please try again...'
                    });
                });
            }
        });
        ev.preventDefault();
    });    
}]) //End loginCtrl

Я хочу отправить roleValue для каждого контроллера, чтобы проверить некоторые проверки. Пожалуйста, помогите мне понять, как это сделать. Кроме того, я могу вызвать ajax из других контроллеров, чтобы вернуть эту переменную?

3 ответа

Решение

Попробуйте эти шаги, это будет работать:

Шаг 1: Создать сервис.

angular.module('app').service('dataStoreService', function() {
    var data = '';
    function setData(newData){
        data = newData;
    }

    function getData(){
        return data;
    }
})

Шаг 2: В вашем вызове Ajax вы можете установить roleValue в сервис.

dataStoreService.setData(roleValue);

Шаг 3: введите dataStoreService в качестве зависимости в контроллерах, где вы хотите получить roleValue, и позвонить getData функция dataStoreService от контроллера

dataStoreService.getData();

Есть много способов. Да, конечно, вы можете хранить значения в cookies или же local-storage, Это два будет лучшим вариантом, если вам нужно повторно использовать значения в нескольких контроллерах. Но если вы будете использовать значения один раз, лучшим вариантом будет использовать $stateParams или же $state Если вы используете UI-роутер, посмотрите разницу между ними. Другой вариант будет использовать $rootScope,

Опция 1

$localStorage

Вы можете установить значение роли в локальном хранилище вашего текущего контроллера и получить значение локального хранилища от другого контроллера для проверки состояния

контроллер 1

$localStorage.set("role",role);

контроллер 2

if($localStorage.get(role)!=1)
{
return false;
}
..
.
.
// next code

Вариант 2

$sccokieStore

Это будет работать так же, как $ localalstorage,

Вариант 3

$service

Вы можете назначить значение роли для объекта области обслуживания. всякий раз, когда вам нужно это проверить. Вы называете эту услугу и делаете это аутентификация

Вариант 3

$Broadcast

это один из лучших вариантов для аутентификации. Он отправляет имя события вниз всем дочерним областям (и их детям) и уведомляет зарегистрированных $rootScope.Scope слушатели. Жизненный цикл события начинается в той области, в которой $broadcast назывался. Все слушатели события в этой области получают уведомление. Затем событие проходит вниз по направлению к дочерним областям и вызывает всех зарегистрированных слушателей по пути. Событие не может быть отменено.

Вы можете сделать аутентификацию в глобальном масштабе, как app.run сторона проверяет текущий маршрут и проверяет подлинность, затем перенаправляет маршрут / нет.

Более подробно: почему мы используем трансляцию $ rootScope. $ В AngularJS?

Другие вопросы по тегам