Как проверить, существуют ли данные $routeParams

Я пытаюсь выяснить, есть ли способ перенаправить или выполнить какое-либо действие на основе данных, существующих в местоположении firebase, с использованием routeParams в angularfire. Если у меня есть настройка профиля пользователя $routeParam, и объект пользователя существует для user1 (users/user1), я хотел бы отобразить этот профиль. Однако, если пользовательский объект для пользователя user20 не существует, вместо отображения страницы шаблона с пустыми данными я хотел бы перенаправить на другую страницу. Я не знаю, куда позвонить. Вот моя настройка контроллера профиля

app.controller('ProfileCtrl',
function ($scope, $routeParams, User) {
    $scope.user = User.findUsername($routeParams.username);

и моя служба пользователя для проверки существования пользователя

 findUsername: function (username) {
        if (username) {
            return users.$child(username);
        }    

person Ron Smalls    schedule 23.04.2014    source источник


Ответы (2)


Как насчет:

app.controller('ProfileCtrl',
    function ($scope, $routeParams, User,$location) {
      if(!$routeParams.username){
         $location.path('/somewhereElse');
      }

    $scope.user = User.findUsername($routeParams.username);

Если вы имеете в виду, хотите ли вы проверить, является ли имя пользователя допустимым, единственный способ сделать это — выполнить некоторую проверку, в идеале на стороне сервера с $http. Я бы предложил создать сервис для проверки сервера на наличие действительных имен пользователей.

person Mohammad Sepahvand    schedule 23.04.2014
comment
Отлично, я посмотрю на создание службы для проверки имени пользователя. Вы знаете какие-нибудь ресурсы? - person Ron Smalls; 24.04.2014
comment
@RonThomson Вам нужно создать угловую службу, которая отправляет GET запрос на ваш сервер и проверяет базу данных, действительно ли введенное имя пользователя или нет, то есть оно существует в таблице «Пользователи» вашей базы данных. - person Mohammad Sepahvand; 24.04.2014
comment
@MohammadSepahvand не будет выдавать «TypeError: невозможно прочитать свойство «имя пользователя» из неопределенного», если оно используется на маршруте, где этого конкретного свойства не существует - person Siddharth Srivastva; 26.03.2015

если параметр является необязательным и отсутствует, тогда $routeParams будет неопределенным, и описанное выше не удастся. Чтобы избежать этого, просто проверьте $routeParams.

if($routeParams && routeParams.username) {
    $scope.user = User.findUsername($routeParams.username);
}
person vidriduch    schedule 11.11.2016