如何将变量值从 ajax 发送到另一个控制器
how to send value of variable from ajax to another controllers
这是我的控制器:
.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 到 return 这个变量吗?
选项 1
$localStorage
您可以在当前控制器的本地存储中设置角色值,并从另一个控制器获取本地存储值以检查条件
控制器 1
$localStorage.set("role",role);
控制器 2
if($localStorage.get(role)!=1)
{
return false;
}
..
.
.
// next code
选项 2
$sccokieStore
它将像 $localstorage 一样工作,
选项 3
$service
您可以在服务范围对象上分配角色值。每当您需要检查时。您调用该服务并进行身份验证
选项 3
$Broadcast
这是进行身份验证的最佳选择之一。它向下派发一个事件名称到所有子作用域(及其子作用域)并通知已注册的 $rootScope.Scope
侦听器。事件生命周期从调用 $broadcast
的范围开始。此范围内事件的所有侦听器都会收到通知。之后,事件向下遍历到子作用域,并沿途调用所有已注册的侦听器。活动无法取消。
您可以在全局范围内进行身份验证,例如 app.run
边检查当前路由并验证身份验证然后重定向路由。
更多详情:Why do we use $rootScope.$broadcast in AngularJS?
有很多方法。是的,您当然可以将值存储到 cookies
或 local-storage
。如果您需要重用多个控制器中的值,这两个将是最佳选择。但是,如果您将使用这些值,那么最好的选择是使用 $stateParams
或 $state
如果您使用的是 ui 路由器 see the difference between the two 。另一种选择是使用 $rootScope
.
尝试这些步骤会起作用:
步骤 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
的控制器中。并从控制器调用 dataStoreService
的 getData
函数。
dataStoreService.getData();
这是我的控制器:
.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 到 return 这个变量吗?
选项 1
$localStorage
您可以在当前控制器的本地存储中设置角色值,并从另一个控制器获取本地存储值以检查条件
控制器 1
$localStorage.set("role",role);
控制器 2
if($localStorage.get(role)!=1)
{
return false;
}
..
.
.
// next code
选项 2
$sccokieStore
它将像 $localstorage 一样工作,
选项 3
$service
您可以在服务范围对象上分配角色值。每当您需要检查时。您调用该服务并进行身份验证
选项 3
$Broadcast
这是进行身份验证的最佳选择之一。它向下派发一个事件名称到所有子作用域(及其子作用域)并通知已注册的 $rootScope.Scope
侦听器。事件生命周期从调用 $broadcast
的范围开始。此范围内事件的所有侦听器都会收到通知。之后,事件向下遍历到子作用域,并沿途调用所有已注册的侦听器。活动无法取消。
您可以在全局范围内进行身份验证,例如 app.run
边检查当前路由并验证身份验证然后重定向路由。
更多详情:Why do we use $rootScope.$broadcast in AngularJS?
有很多方法。是的,您当然可以将值存储到 cookies
或 local-storage
。如果您需要重用多个控制器中的值,这两个将是最佳选择。但是,如果您将使用这些值,那么最好的选择是使用 $stateParams
或 $state
如果您使用的是 ui 路由器 see the difference between the two 。另一种选择是使用 $rootScope
.
尝试这些步骤会起作用:
步骤 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
的控制器中。并从控制器调用 dataStoreService
的 getData
函数。
dataStoreService.getData();