如何将变量的值从ajax发送到另一个控制器

时间:2017-01-04 06:04:59

标签: javascript angularjs angular-controller

这是我的控制器:

.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 个答案:

答案 0 :(得分:0)

选项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?

答案 1 :(得分:0)

有很多方法。是的,您当然可以将值存储到cookieslocal-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