2017-02-19 2 views
0

В любом случае, я могу получить текущее название маршрута? Существует функция getRoute, но я должен сам передать имя маршрута. Если есть способ получить имя всех маршрутов из объекта маршрутизатора в контроллерах, это также может быть полезно для меня. Например что-то вроде:Как я могу получить текущий маршрут?

this.getRouter().getRoutes() 

Существует функция getViews, но я не мог найти тот же один для маршрутов.

ответ

0
this.getRouter()._oRoutes 

, возможно, работает для меня.

+0

Это возвращает все маршруты. И так или иначе, чтобы получить текущий маршрут? –

+1

router._sActiveRouteName выглядит как указание активного имени маршрута. – Huseyin

2

Я просто расширенный маршрутизатор по умолчанию: https://gist.github.com/ffleige/1f080e5c0769085569188302b2e12040

Чтобы использовать его, заменить класс маршрутизатора по умолчанию в вашем manifest.json

"routing": { 
    "config": { 
    "routerClass": "my.app.MyRouter", 

Используйте удлинять маршрутизатор в контроллерах как это

// get id of current route 
var routeId = UIComponent.getRouterFor(this).getCurrentRouteId(); 
// get current route object 
var route = UIComponent.getRouterFor(this).getCurrentRoute(); 

Это решение не является насильственным доступом с частными членами и проверяется с помощью openui5 1.44.

2

Не так просто, как кажется, хотя он по-прежнему возможен без каких-либо сторонних решений.

Давайте предположим, что маршруты (в manifest.json) являются:

"routes": [ 
      { 
       "pattern": "", 
       "name": "Main", 
       "view": "main", 
       "targetAggregation": "pages" 
      }, 
      { 
       "pattern": "create", 
       "name": "Create", 
       "view": "myView", 
       "targetAggregation": "pages" 
      }, 
      { 
       "pattern": "edit/{id}", 
       "name": "Edit", 
       "view": "myView", 
       "targetAggregation": "pages" 
      }, 
      { 
       "pattern": "view/{id}", 
       "name": "View", 
       "view": "myView", 
       "targetAggregation": "pages" 
      } 
     ] 

Так что в этом случае вы хотели бы получить текущее имя: Создать, Редактировать или View.

примечание 1: В моем случае есть один вид/контроллер («MyView») для обработки трех различных типов дисплеев, но это не имеет значения - вы можете отдельные мнения/контроллеры, а также. (см. примечание 2 для более подробной информации).

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

Шаг 1:

В данном контроллере (MyView), использовать маршрутизаторы attachRouteMatched метод в встроенном onInit метод:

onInit: function(){ 
    var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
       oRouter.attachRouteMatched(this.routeMatched, this); 
} 

Шаг 2:

В том же контроллере, в основном непосредственно по методу OnInit, создать метод обратного вызова (в моем случае это называется routeMatched):

routeMatched: function(oEvent){ 
      var oParameters = oEvent.getParameters(), 
      this.routeName = oParameters.name; // Yay! Our route name! 
} 

Шаг 3

Теперь, когда у вас есть доступ к экземпляру вашего контроллера, вы просто называете его новым свойством: routeName. В большинстве случаев (услуги, пользовательские элементы управления, тот же контроллер) будет:

this.routeName; 

примечание 2: Очевидная проблема этого подхода является тот факт, что вам придется повторить эти шаги для каждого который должен иметь доступ к запущенному в данный момент маршруту.