2016-09-08 3 views
2
$stateProvider.state('state1', { 
    url:'/state1/:param1/and/{param2:.+}', 
    templateUrl: 'state1.html', 
    controller: 'State1Controller', 
}); 

Я пытаюсь сделать param2, используя регулярное выражение, как показано выше. Если он пуст, то состояние по умолчанию следует загружать:Угловой UI-маршрутизатор - как сделать необходимый параметр

$urlRouterProvider.otherwise("/"); 

    $stateProvider.state('otherwise',{ 
     url: '/', 
     templateUrl:'default.html' 
    }); 

Теперь результаты:

state1/1/and/1 идет в state1. Хорошо.

state1/1/and имеет значение otherwise. Хорошо.

Но

state1/1/and/ идет в том состоянии! Ни одно из состояний не загружено. Это не перенаправление на /. Какие?!

Как правильно выполнить требуемый параметр?

+0

Что находится в State1Controller? Что-нибудь в вашей консоли? Похоже, что что-то в 'state1' может взорваться. Что заставляет вас думать, что «ни штаты не загружены» - вам не хватает представления? – adamdport

+0

'state1.html' не загружен. 'ui-view' пуст. Я также поставил 'console.log ('loaded')' в 'State1Controller' и не выводил на консоль. Ошибок нет. – Shawn

+2

Следующий плункер работает так, как вы ожидали: http://plnkr.co/edit/XTDJ5FAHNh63RoECKwCQ?p=preview –

ответ

1

Параметры углового js ui-router по умолчанию не являются обязательными. Для вашего примера выше мы можем использовать $ stateParams, чтобы проверить, определен ли требуемый параметр. Пожалуйста, ознакомьтесь с приведенным ниже кодом.

if ($stateParams.param2=== undefined) { 
    // Navigate to home. 
    $location.path('/'); 
} 

Надеюсь, это решит вашу проблему. Благодарю.

Смежные вопросы