【问题标题】:How to preset state of ui-router programmatically如何以编程方式预设 ui-router 的状态
【发布时间】:2017-08-28 09:04:07
【问题描述】:

我已经实现了一个md-sidenav,它允许通过在 sidenav 列表中选择它来导航到不同的 html 模板。
我正在尝试的是在加载整个 html 页面时预选我的md-sidenav 中的第一项。所以我不必按第一个按钮就可以通过 ui-router 路由到第一个模板。

HTML:

<md-sidenav flex class="sidenav md-whiteframe-z2 md-sidenav-left" md-component-id="left">
    <md-button ng-repeat-start="item in menuItems" 
               flex layout="column" layout-align="center center"
               ng-click="selectItem(item)"
               ui-sref="{{item.sref}}">
        <div class="md-tile-content">
            {{item.name}}
        </div>
    </md-button>
    <md-divider ng-repeat-end></md-divider>
</md-sidenav>

<md-content flex class="md-padding page-content">
    <div ui-view></div>
</md-content>

控制器:

menuItems = [
    {
        name: 'personA',
        icon: 'person',
        sref: '.personA'
    },
    {
        name: 'personB',
        icon: 'person',
        sref: '.personB'
    },
    {
        name: 'personC',
        icon: 'person',
        sref: '.personC'
    }
];

function toggleItemsList() {
    $mdSidenav('left').toggle();

}

function selectItem (item) {
    self.title = item.name;
    self.toggleItemsList();
}

ui-router的stateProvider:

$stateProvider
    .state('.personA', {
        url:... 
        controller:... 
        templateUrl:... 
    })
    .state('.personB', {
        url: ...
        controller:... 
        templateUrl: ...
    })
    .state('.personC', {
        url: ...
        controller: ...
        templateUrl: ...
    });

我通过使用ng-init$first 知道第一个模板的参数,但由于某种原因,ui-router 没有被触发,因此没有加载 html 模板。我想我需要操纵ui-sref="{{item.sref}}",但对此不确定。

【问题讨论】:

  • 干杯 m8,看起来熊现在确实帮助了你 =)

标签: javascript angularjs angularjs-material


【解决方案1】:

要使用 ui-router 以编程方式设置默认状态,您可以使用 $urlRouterProvider

$urlRouterProvider.otherwise('/yourDefaultStateUrl');

例子:

function myConfig($stateProvider, $urlRouterProvider){
    $stateProvider
    .state('home', {
        url: '/home', 
        templateUrl:... 
    })
    .state('about', {
        url: '/home', 
        templateUrl: ...
    });

    $urlRouterProvider.otherwise('/home'); //Home as default state
}

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2014-12-11
    • 2018-02-17
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多