Можно ли загрузить представление пользовательского интерфейса с параметром при загрузке страницы?

Могу ли я перейти к первой ссылке ui-sref, присутствующей в jsp при загрузке тела jsp, с параметром запроса?

Я делюсь своим кодом.

тест.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 в качестве параметра запроса от backend. Но пользователь не направляется в dashboard, если я не нажму на «Dashboard».

Я также попытался использовать иначе, как это —

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

Но это показывает, что переданные stateParams не определены.

Я совершенно уверен, что мне не хватает какой-то базовой концепции, но я не могу найти какой-либо ключ в google. Кто-нибудь может мне помочь?

2 ответа

  1. Вы можете передать параметр состояния следующим образом :

    URL может принимать несколько различных вариантов, и мы можем установить основные параметры в url, как в ngRoute:

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

    Или в Вас случае :

    Приложение захватывает: clientId в качестве второго компонента в URL. Например, если пользователь переходит к /mybackend / 1 , $stateParams.clientId становится 1 (так как $stateParams будет {clientId: 1}).

    Мы также можем использовать другой синтаксис, если вы предпочитаете:

    url: '/mybackend/{clientId}'
    
  2. Я только что решил вопрос. Хотя это не идеальное решение, но оно работает на данный момент. Я запустил событие click на вкладке «dashboard», как только документ загружен.

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