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

时间:2016-06-14 14:07:43

标签: angularjs angular-ui-router angularjs-routing angular-controller

我在广播时执行路由,我需要通过路由将$ 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: '/'
});

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

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

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

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

$rootScope.$broadcast('unauthorized_access', param);

1 个答案:

答案 0 :(得分:1)

使用resolve:

$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