Как отправить значение переменной из 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?