如何将变量值从 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?

有很多方法。是的,您当然可以将值存储到 cookieslocal-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 的控制器中。并从控制器调用 dataStoreServicegetData 函数。

dataStoreService.getData();