$stateParams преобразует значение в строку

Я использую UI-Router, Вот одно из моих состояний, в которое я направляюсь через ui-sref:

.state("community", {
    url: "/community/:community_id",
    controller: "CommunityCtrl",
    templateUrl: "/static/templates/community.html"
})

В одном из моих шаблонов, откуда я перехожу в состояние "сообщества":

<div ui-sref="community({community_id: community.community_id})"></div>

Вот мой объект сообщества:

{
    name: 'Community name',
    community_id: 11 //int, not a string
}

Как видите, ключ 'community_id' содержит значение int, а не строковое значение. Однако, когда я получаю доступ к этому параметру через $stateParams Я получил:

community_id: "11" //string

Почему я получаю строку?

1 ответ

Решение

Самый простой способ получить community_id как число (int), чтобы объявить этот параметр как int - {community_id:int}

.state("community", {
    url: "/community/{community_id:int}",
    controller: "CommunityCtrl",
    templateUrl: "/static/templates/community.html"
})

Проверьте документ о .state() установка url:

url фрагмент с необязательными параметрами. Когда состояние перемещается или переходит к, $stateParams Сервис будет заполнен любыми переданными параметрами.

(См. UrlMatcher UrlMatcher} для более подробной информации о приемлемых шаблонах)

Примеры:

url: "/home"
url: "/users/:userid"
url: "/books/{bookid:[a-zA-Z_-]}"
url: "/books/{categoryid:int}"
url: "/books/{publishername:string}/{categoryid:int}"
url: "/messages?before&after"
url: "/messages?{before:date}&{after:date}"
url: "/messages/:mailboxid?{before:date}&{after:date}"
Другие вопросы по тегам