繁体   English   中英

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

[英]Is it possible to load a ui view with parameter when page is loaded?

我可以使用请求参数将用户导航到jsp主体负载上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作为请求参数。 但是除非我单击“仪表板”,否则用户不会被路由到仪表板。

我也尝试过使用其他方式-

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

但是,这表明传递的stateParams是未定义的。

我很确定我缺少一些基本概念,但是我无法在Google中找到任何线索。 有人可以帮我吗?

您可以像这样传递状态参数:

URL可以采用几种不同的选项,我们可以像ngRoute一样在url中设置基本参数:

 $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}'

我刚刚解决了这个问题。 尽管这不是理想的解决方案,但到目前为止它仍在工作。 加载文档后,我立即在“仪表板”选项卡上触发了单击事件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM