Angular : 将参数从 $routeProvider.when 传递给控制器

Angular : pass parameter to controller from $routeProvider.when

我在广播上执行路由,我需要通过路由将参数从 $rootScope.$on 传递到控制器。

$rootScope.$on('unauthorized_access', function (event, args) {
    $location.path('/login:' + args.msg);
});

现在,这是有效的。

$routeProvider
.when('/', {
    templateUrl: 'mainApp/landingPage/login.html'
})
.when('/login::msg', {
    templateUrl: function(params) {
        if (params) {
            // The params can be printed in console from here...
            console.log(params);
        }
        return 'mainApp/landingPage/login.html';
    },
    controller: 'loginController'
})
.otherwise({
    redirectTo: '/'
});

现在,到目前为止似乎没问题。但是我需要将参数传递给 loginController。我试过了,

.when('/login::msg', {
    templateUrl: function(params) {
        if (params) {
            console.log(params);
        }
        return 'mainApp/landingPage/login.html';
    },
    controller: 'loginController',
    pageParams : params
})

但我想,我做错了。请帮我。任何帮助表示赞赏。谢谢。

编辑:我将添加一个场景。当 'token' 在固定时间后无效并且用户被重定向到登录屏幕时,我需要从任何屏幕将消息字符串传递给 loginController。现在,当用户第一次到达时,没有要显示的消息。 因此,这就是我将消息传递给 broadcast

的方式
$rootScope.$broadcast('unauthorized_access', param);

使用解析:

$routeProvider
    .when("/news", {
        templateUrl: "newsView.html",
        controller: "newsController",
        resolve: {
            message: function(messageService){
                return messageService.getMessage();
        }
    }
});

然后在你的控制器中,你可以得到如下数据:

app.controller("newsController", function (message) {
    $scope.message = message;
});

更多相关信息:

http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx