2016-11-19 1 views
0

Я использую компонент маршрута приложения для маршрутизации.Глубокие пути с элементом app-route

Вот важная часть кода:

<app-location route="{{route}}"></app-location> 
<app-route 
     route="{{route}}" 
     pattern="/:page" 
     data="{{routeData}}" 
     tail="{{subroute}}"></app-route> 

Я хотел бы улучшить ясность моей структуры приложения, так что настройки не будет находиться в корневой папке, а в папке пользователя и т.д. URL копирует структуру моих папок. В идеале модель приложение-маршрут будет похожа на это:

шаблона = «/ {путь_к_папки} /: страница»

Тогда я хотел бы использовать obserever, что бы слушать изменения routeData, которые будут получать путь_к_папку и страницу как параметры. После того, что я ленивый загрузить страницу надлежащим образом:

var resolvedPageUrl = this.resolveUrl("/views/" + folderpath + page + '-view.html'); 
this.importHref(resolvedPageUrl, null, this._showPage404, true); 

Я знаю, что это было бы легко осуществить путем удаления элемента приложения маршрутный и разбора маршрута самого, но мне интересно, если есть «Offical» способ получить это поведение с помощью компонента app-route.

Заранее спасибо, Ян

ответ

3

Основная идея заключается в том, что вы приковать маршруты вместе. Таким образом, чтобы достичь того, чего вы хотите, вы эффективно, вероятно, будет делать что-то вроде этого

<app-location route="{{route}}"></app-location> 
<app-route 
    route="{{route}}" 
    pattern="/:folderpath" 
    data="{{routeData}}" 
    tail="{{subRoute}}"></app-route> 

--------- Еще один элемент, возможно

<app-route 
    route="{{subRoute}}" 
    pattern="/:page" 
    data="{{subRouteData}}"></app-route> 

Берегись, есть немного Гоча с этим , в том, что «страница» app-route будет соответствовать независимо от того, какой путь к папке фактически существует, и если вы распространяете это в других элементах, вы можете не захотеть, чтобы это произошло.

Решение этой проблемы заключается в расширении картины в случаях подмаршрут - как так

<app-route 
    route="{{subRoute}}" 
    pattern="/reports/:page" 
    data="{{subRouteData}}"></app-route> 

и

<app-route 
    route="{{subRoute}}" 
    pattern="/appointments/:page" 
    data="{{subRouteData}}"></app-route> 
+0

Спасибо за ответ. Этот подход описан в документации по приложению, но я не знаю, почему разработчики Polymer выбрали цепочку вместо централизованного решения. Я создаю одностраничное приложение, и я думаю, что он добавляет излишнюю сложность в подстраницы. Однако я новичок в веб-разработке, поэтому, возможно, есть какое-то скрытое преимущество, о котором я еще не знаю. Возможно, это преимущество в огромных приложениях, но в средних размерах кажется, что это слишком много. Хороший день –

+0

Если вы посмотрите на мой репозиторий github, вы увидите как централизованное ('akc-router'), так и распределенное решение (' akc-route' - это основано на 'app-route', но удаляет некоторые из Гоча). Я создаю SPA и начинаю с 'akc-router', затем перешел с' page.js' (также централизованное решение - есть некоторые ранние поликасты, использующие его), но я теперь использую 'akc-route', и есть некоторые реальные приятные способности быть способными контролировать только часть URL-адреса в пользовательских элементах, расположенных глубоко внутри приложения. – akc42

+0

Спасибо, я обязательно посмотрю. –