如何以编程方式预设 ui-路由器的状态
How to preset state of ui-router programmatically
我已经实现了一个 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-路由器的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}}"
但不确定这一点。
要以编程方式使用 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
}
我已经实现了一个 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-路由器的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}}"
但不确定这一点。
要以编程方式使用 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
}