2016-10-06 3 views
3

Предположим, что в 90-95% моих маршрутов мне нужно проверить, находится ли пользователь (скажем, тюрьма). Тогда, я в настоящее время делать что-то вроде:Решение для определения маршрутов Angularjs

$routeProvider 
    .when("/news", { 
     templateUrl: "newsView.html", 
     controller: "newsController", 
     resolve: { 
      injail: function(jailservice){ 
       return jailservice.injail(); 
     } 
    } 
}) 

ли мне действительно нужно сделать, это решимость на каждом маршруте? (маршруты находятся в разных папках, каждый файл маршрута содержит маршрут для определенного модуля).

Является ли это чем-то лучшим, что я могу сделать, чем называть решение проблемы на каждом маршруте?

ответ

2

Несколько вариантов.

Вариант 1 - использование метрополия с решимостью

$stateProvider 
    .state('parent', { 
     resolve:{ 
      resA: function() {} 
     } 
    }) 
    .state('parent.child', { 
     // resA from parent state available to all child states 
     controller: function (resA) {} 
    }); 

More info

Вариант 2 - внешние функции Разрешая (менее дублированный код)

Декларация:

resolve: { 
    myResolve: myResolve 
} 

При использовании ES2015, вы можете сократить его resolve: {myResolve} (see enhanced object literals)

Определение (в отдельном файле, содержащем все раздела решает):

myResolve.$inject = ['myService']; 
function myResolve(myService) { 
    return myService.getStuff(); 
} 

More info

EDIT - например, с использованием код:
В объявлении маршрутов измените его: resolve: {injail: injailResolve}

В отдельном файле, определение:

injailResolve.$inject = ['jailservice']; 
function injailResolve(jailservice) { 
    return jailservice.injail(); 
} 
+0

Would вариант 1 работа по папкам? – maria

+0

Думайте так, но вам потребуется изменить структуру ваших маршрутов, может быть довольно некоторая работа ... Вариант 2 более прост. –

+0

Как будет выглядеть инъекция myservice? не могли бы вы также привести пример этого файла? – maria

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