Angular状态:传递多个参数而不将url查询字符串更改为控制器

时间:2016-06-28 11:37:33

标签: angularjs angular-ui-router

我想从app.run向我的loginController发送一个参数。因为,我从app.run中定义的$ rootScope。$ on()调用state.go()。

app.run('$rootScope', '$state', '$stateParams',function($rootScope, $state, $stateParams(){
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams;
    $rootScope.$on('unauthorized_access', function (event, args) {
        $state.go("page.login", {'error': args.error,'msg': args.msg});
    });
}]);

我有

app.config(['$stateProvider','$urlRouterProvider',function($stateProvider, $urlRouterProvider, $httpProvider){
    $urlRouterProvider.otherwise('/');
    $stateProvider
    // some parts omitted...
    .state('page.login', {
        url: '/login',
        views: {
            'page': {
               templateUrl: 'app/landingPage/login.html',
                controller:  'loginController',
                params: {obj : {error : null, message: null} }
           }
        }
    });
}]);

我希望在转换期间通过$ state.go()将参数从app.run传递给loginController。

    $state.go("page.login", {'error': err,'message': msg});

在我的控制器中,这就是我试图接收参数的方法......

app.controller('loginController',['$scope', '$state', '$stateParams',   function($scope, $state, $stateParams){
    console.log($stateParams.obj);
}]);

我不想将网址更改为>> url:' / login /:params'等在stateProvider中

我引用了此页面:stackoverflow example

但是,没有帮助。任何帮助表示赞赏。为我糟糕的沟通道歉。

1 个答案:

答案 0 :(得分:0)

经过长时间的研究,我得到了奇怪的解决方案。我仍然怀疑,这是否是一个解决方案。但是,它对我有用....我做了一个ui.router LOL的破解......

我使用的是Angular ui-router版本v0.2.18。在那里排队。 3160,他们放了一行代码,如:

// Store the hash param for later (since it will be stripped out by various methods)
var hash = toParams['#'];

并排队。 3223他们有

 if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) {
    if (hash) toParams['#'] = hash;

所以,我想用这样的'#'键传递我的对象

.state('page.login', {
    url: '/login',
    views: {
        'body@page': {
            templateUrl: 'app/landingPage/login.html',
            controller:  'loginController',
            params: {'#' : null},
        }
    },
    authenticate: false
});

并且喜欢这个

$rootScope.$on('unauthorized_access', function (event, args) {
    $state.go("page.login", {'#' : {'error': args.error,'msg': args.msg}});
});

并且惊讶,它起作用..... 我得到了登录控制台的对象:console.log($ stateParams ['#']);

我知道解决方案是狡猾的[ udayip ,就像在马拉雅拉姆语中一样] ......但是它对我有用......我不会将此标记为答案。所以,我请求一些有角度的专家提供真正的解决方案。如果有专家说,这可能是一个解决方案,我会将其标记为答案。