2016-01-03 3 views
0

Я использую UrialJD ui-router для захвата моего URL-адреса и отправки двух параметров с этого URL-адреса на мой контроллер. Вот мои требования:Как использовать UL-маршрутизатор AngularJS захватить этот URL-адрес с помощью необязательного параметра?

  • Первый параметром является обязательным числом (id)
  • Второго параметра является необязательной строкой (slug)
  • Этих два параметра разделены /
  • Я хочу это игнорировать любой одиночный завершающую /

в настоящее время я делаю это:

$stateProvider.state('mystate', 
    { 
    url: '/mystate/{id:int}{slug:(?:/[^/]+)?}', 
    params: { 
     slug: {value: null} 
    }, 
    templateUrl: 'partials/mystate.html', 
    controller: function($stateParams) { 
     console.log('$stateParams.id=',$stateParams.id, ' $stateParams.slug=',$stateParams.slug); 
    } 
    } 

Для URL: mystate/1 Это правильно захватывает:

$stateParams.id=1, $stateParams.slug=null 

Для URL: mystate/1/myslug Это отражает неправильное значение для slug:

$stateParams.id=1, $stateParams.slug=/asdad 

Для URL: mystate/1/ Это ничего не захватить ,

Для URL: mystate/1/myslug/ Это ничего не фиксирует.

Как это записать, чтобы он правильно фиксировал все четыре вышеупомянутых URL-адреса, но не передает какой-либо из / s на контроллер?

ответ

2

Для дополнительного слешем, вы должны set strict mode to false в конфигурации блока:

angular.module('yourModule').config(['$urlMatcherFactoryProvider', function($urlMatcherFactoryProvider) { 
    $urlMatcherFactoryProvider.strictMode(false); 
}]); 

Для имеющих дополнительные параметры, есть длинная дискуссия here. В конце концов, они предлагают использовать squash:

$stateProvider.state('mystate', 
{ 
    url: '/mystate/{id:int}/:slug', 
    params: { 
    slug: {value: null, squash: true} 
    }, 
    templateUrl: 'partials/mystate.html', 
    controller: ['$stateParams', function($stateParams) { 
    console.log('$stateParams.id=',$stateParams.id, ' $stateParams.slug=',$stateParams.slug); 
    }] 
} 

squash имеет хорошую documentation, если вы установите его так, он опускает параметр из URL, если он имеет значение по умолчанию.

+0

Спасибо! Где я могу вставить строку для '$ urlMatcherFactoryProvider'? Когда я вставил его прямо перед строкой $ stateProvider, я получил: 'Uncaught Error: [$ injector: modulerr] Не удалось создать экземпляр модуля myApp из-за: ReferenceError: $ urlMatcherFactoryProvider не определен' –

+1

Вам нужно сначала ввести его в вашу конфигурационную функцию – iH8

+1

Я отредактирую вопрос, чтобы ответить на этот вопрос. – mostruash