加载页面时是否可以使用参数加载ui视图?

时间:2016-11-03 09:45:15

标签: javascript angularjs jsp angular-ui-router

我可以使用请求参数将用户导航到jsp body load上的jsp中存在的第一个ui-sref链接吗?

我正在分享我的代码。

test.jsp的

<body ng-app="myApp">
    <nav class="navbar navbar-inverse">
        <ul class="nav navbar-nav navbar-right">
            <li class="nav-iem">
                <a>${clientId}</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#" ui-sref="dashboard({clientID: ${clientId}})">Dashboard</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#" ui-sref="clientDetail({clientID: ${clientId}})">Profile</a>
            </li>
        </ul>
    </nav>

AngularApp.js

var app = angular.module('myApp', ['ui.router','ui.bootstrap']);
app.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
    $stateProvider
    .state('dashboard', {
        url: '/dashboard/:clientID',
        resolve: {
            getList1: [ 'getService', '$stateParams', function(getService, $stateParams) {
                return getService.getData('/mybackend/url1?clientId=' + $stateParams.clientID);
            } ]
        },
        templateUrl: '/dashboard.html',
        controller: 'dashboardCtrl'
    })
    .state('clientDetail', {    
        url: '/clientDetail/:clientID',
        resolve: {
            user: [ 'getService', '$stateParams', function(getService,$stateParams) {
                return getService.getData('/mybackend/url2?clientId=' + $stateParams.clientID);
            } ]
        },
        templateUrl: '/myProfile.html',
                controller : 'myProfileCtrl',
    })

当我成功登录时,我从后端收到我的clientID作为请求参数。但是,除非我点击&#34; Dashboard&#34;。

,否则用户不会被路由到仪表板

我也尝试过这样使用 -

$urlRouterProvider.otherwise(function($injector, $location){
    var state = $injector.get('$state');
    state.go("dashboard", $location.search());
    return $location.path();
});

但它表明stateParams传递未定义。

我很确定我遗漏了一些基本概念,但我无法在谷歌中找到任何线索。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您可以传递状态参数,如下所示:

URL可以有几个不同的选项,我们可以在网址中设置基本参数,如ngRoute:

 $stateProvider
    .state('inbox', {
    url: '/inbox/:inboxId',
    template: '<h1>Welcome to your inbox</h1>',
    controller: function($scope, $stateParams) {
                 $scope.inboxId = $stateParams.inboxId;
                }
 });

或者在你的情况下:

app捕获:clientId作为URL中的第二个组件。例如,如果用户转换为/ mybackend / 1 ,则$ stateParams.clientId变为1(因为$ stateParams将为{clientId:1})。

如果您愿意,我们也可以使用不同的语法:

url: '/mybackend/{clientId}'

答案 1 :(得分:0)

我刚刚解决了这个问题。虽然它不是理想的解决方案,但它现在正在运作。我在&#34;仪表板上触发了点击事件&#34;文档加载后立即选中。

$(document).ready(function() {
    $("#navItem1").trigger('click');
})