как отправить значение переменной из 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 из других контроллеров, чтобы вернуть эту переменную?


person Sandhiya    schedule 04.01.2017    source источник
comment
Отдайте в сервис. И получить к нему доступ с других контроллеров.   -  person Sai    schedule 04.01.2017
comment
Замените метод jQuery $.ajax сервисом Angular $http. Он возвращает промисы, которые лучше подходят для обмена асинхронно полученными данными. И он лучше интегрирован с фреймворком AngularJS и его дайджест-циклом.   -  person georgeawg    schedule 04.01.2017


Ответы (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();
person Rohit Jindal    schedule 04.01.2017

Опция 1

$localStorage

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

контроллер 1

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

контроллер 2

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

Вариант 2

$sccokieStore

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

Вариант 3

$service

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

Вариант 3

$Broadcast

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

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

Подробнее: Почему мы используем $rootScope.$broadcast в AngularJS?< /а>

person Ramesh Rajendran    schedule 04.01.2017

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

person Abdullah Al Noman    schedule 04.01.2017