这是我的控制器:
.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来返回这个变量吗?
答案 0 :(得分:0)
$localStorage
您可以在当前控制器的本地存储中设置角色值,并从另一个控制器获取本地存储值以检查条件
控制器1
$localStorage.set("role",role);
控制器2
if($localStorage.get(role)!=1)
{
return false;
}
..
.
.
// next code
$sccokieStore
它的作用与$ localstorage相同,
$service
您可以在服务范围对象上分配角色值。无论何时你需要检查。你打电话给那个服务并进行认证
$Broadcast
这是进行身份验证的最佳选择之一。它将事件名称向下调度到所有子范围(及其子级),并通知已注册的$rootScope.Scope
侦听器。事件生命周期从调用$broadcast
的范围开始。此范围内事件的所有侦听器都会收到通知。之后,事件向下遍历子范围,并在此过程中调用所有已注册的侦听器。该活动无法取消。
您可以在app.run
方面进行全局身份验证,检查当前路由并验证身份验证,然后重定向路由。
答案 1 :(得分:0)
有很多方法。是的,您当然可以将值存储到cookies
或local-storage
。如果您需要重用多个控制器中的值,这两个将是最佳选择。但是,如果您使用的是{@ 1}},那么最好的选择是使用$stateParams
或$state
。另一种选择是使用$rootScope
。
答案 2 :(得分:0)
尝试以下步骤:
第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
的{{1}}函数。
dataStoreService