2017-01-20 3 views
0

Так я 2 маршрута установить:UI-маршрутизатор проблема с stateParams и маршрутизации

$stateProvider.state('accounts', { 
    abstract: 'true', 
    url: "/accounts", 
    template: '<div ui-view></div>' 
}).state('accounts.view', { 
    url: "/:accountNumber", 
    views: { 
     '@': { 
      templateUrl: 'tpl/account/index.html', 
      controller: 'AccountController', 
      controllerAs: 'controller' 
     } 
    }, 
    resolve: { 
     today: ['today', function (today) { 

      // Return todays date 
      return today(); 
     }], 
     tomorrow: ['tomorrow', function (tomorrow) { 

      // Return tomorrows date 
      return tomorrow(); 
     }], 
     lastMonth: ['lastMonth', function (lastMonth) { 

      // Return lastMonths date 
      return lastMonth(); 
     }], 
     account: ['$stateParams', 'AccountService', function ($stateParams, accountService) { 
      console.log('hi'); 
      return accountService.get($stateParams.accountNumber); 
     }] 
    }, 
    data: { 
     requireLogin: true, 
     pageTitle: 'Account details' 
    } 
}).state('accounts.create', { 
    url: '/create', 
    views: { 
     '@': { 
      templateUrl: 'tpl/account/save.html', 
      controller: 'AccountSaveController', 
      controllerAs: 'controller' 
     } 
    }, 
    resolve: { 
     account: function() { 
      return {}; 
     } 
    }, 
    data: { 
     requireLogin: true, 
     pageTitle: 'Create account' 
    } 
}).state('accounts.view.edit', { 
    url: '/edit', 
    views: { 
     '@': { 
      templateUrl: 'tpl/account/save.html', 
      controller: 'AccountSaveController', 
      controllerAs: 'controller' 
     } 
    }, 
    data: { 
     requireLogin: true, 
     pageTitle: 'Edit account' 
    } 
}) 

Если я нажимаю кнопку, украшенную ui-sref='accounts.create' будет ориентироваться на правильный взгляд, но он пытается сделать решимость учетная запись. Вид. Кажется, что : accountNumber смешивается с /create. Если я обновляю свою страницу, она не загружает представление и все еще пытается разрешить учетную запись.

Я пробовал несколько способов решить эту проблему. Я хотел бы иметь URLs, как это:

счета /: ACCOUNTNUMBER - для просмотра учетной записи

счетов/создание - для создания учетной записи и

счета /: ACCOUNTNUMBER/Редактировать - Для редактирования счетки

Возможно ли установить маршруты?

+0

Не уверен, что у вас не может быть ** учетных записей /: accountNumber ** и ** accounts/create **. Как ссылаются на https://github.com/angular-ui/ui-router/wiki/URL-routing#user-content-url-parameters *** Имена параметров могут содержать только слова (латинские буквы, цифры и underscore) и должен быть уникальным в шаблоне (как по пути, так и по параметрам поиска). *** – Korte

+0

Возможно, вы можете изменить маршрут редактирования, чтобы быть 'account/edit /: accountNumber', чтобы избежать путаницы. –

ответ

0

Если ваш accountNumber действительно номер, вы можете указать свое account.view как url: "/{accountNumber:int}". Это предотвратит совпадение accounts/create. В противном случае вы можете использовать какое-то пользовательское регулярное выражение, чтобы найти то же самое, что и docs.

Вы также можете найти GitHub issue полезно.

+0

номер учетной записи является строкой, но начинается с буквы и затем цифры, поэтому регулярное выражение может работать – r3plica

+0

Я нашел это регулярное выражение: [AZ] {3} \ d {3} (\ d {4 })? но это не вызывает угловой сбой. Это заявляет, что должно быть 3 алфавитно-цифровых символа, а затем 3 или 7 цифр) – r3plica

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

  • Нет связанных вопросов^_^