Polymer 1.0 - маршрутизация

Я новичок в Polymer. Я начинаю писать простой webapp, в котором 1. Пользователь сначала приземлился на странице входа 2. Если пользователь переходит к логину, затем направляет пользователя на страницу содержания

Я пишу элемент "login"

<dom-module id="login">
  <template>
    <!-- local DOM for your element -->
    <p>Username</p>
    <input class="paper-font-body2" value="{{email::change}}" type="email">
    <br/>
    <p>Password</p>
    <input class="paper-font-body2" value="{{password::change}}" type="password">
    <p>{{errorMessage}}</p>

    <iron-ajax
      id="ajax"
      url=""
      method="POST"
      on-response="signInResponse"
      debounce-duration="300">
    </iron-ajax>

    <button on-click="signIn">Signin</button>
  </template>
</dom-module>

<script>
  // element registration
  Polymer({
    is: "login",

    // add properties and methods on the element prototype
    properties: {
      // declare properties for the element public API
      email: {
        type: String,
        value: "username"
      },
      password: {
        type: String,
        value: "password"
      },
      errorMessage: {
        type: String,
        value: ""
      }
    },

    signIn: function() {
      this.$.ajax.url = "http://myserver/login/email";
      this.$.ajax.params = {"email":this.email, "password": this.password};
      this.$.ajax.generateRequest();
    },

    signInResponse: function(request) {
      response = request.detail.response;
      console.log(response);
      if (response.code == '0') {
        this.fire("signin-success", response);
      } else {
        this.fire("signin-fail", response);
      }
    }
  });
</script>

На index.html(главная страница), я использую

<self-login
      sign-in-success="onSignedIn"
      ></self-login>

Вопрос: в обратном вызове onSignedIn() я отправил свою страницу в /content. Как я могу сделать?

РЕДАКТИРОВАТЬ 1: Как предлагают @zacharytamas, я пытаюсь использовать app-router, как показано ниже

index.html

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
  <title>app-router</title>
  <script src="../bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <link rel="stylesheet" href="styles/main.css" shim-shadowdom>
  <link rel="import" href="../bower_components/app-router/app-router.html">
</head>
<body unresolved>
<app-router>
  <app-route path="/" import="/elements/home-page.html"></app-route>
  <app-route path="/test" import="/elements/home-page.html"></app-route>
  <app-route path="*" import="/elements/not-found-page.html"></app-route>
</app-router>

<script src="scripts/app.js"></script>

</body>
</html>

домашняя page.html

<dom-module  id="home-page" noscript>
  <template>
    <h2>Hello</h2>
  </template>
</dom-module>

Показывает пустую страницу, когда я просматриваю как http://localhost:3000/, так и http://localhost:3000/test в Chrome, Любая идея?

Ответы

Ответ 1

Полимер не имеет встроенной в него маршрутизации по умолчанию. Однако есть несколько интерфейсных схем маршрутизации, которые вы можете использовать с Polymer.

Очень часто используемый подход представляет собой настраиваемый элемент app-router, который позволяет определять маршруты декларативно только с одним HTML. Раньше у меня был некоторый успех. Оформить веб-сайт для получения информации о его настройке.

Другой способ сделать это на основе HTML - это настраиваемый элемент, сделанный членом команды Polymer под названием more-routing. У Google есть сериал о Полимере, называемый Поликасты, который сделал видео, объясняющее more-routing. Вы должны проверить этот видеоролик для получения информации о начале работы.

Другой вариант - сделать это с помощью JavaScript с помощью page.js framework. Это метод, используемый Polymer Starter Kit. Здесь другой Поликаст, чтобы вы начали с этого пути.

Добро пожаловать в мир полимеров!

Ответ 2

Хорошие новости! Команда Polymer выпустила официальный маршрутизатор. Отличное введение доступно в их блоге:

https://www.polymer-project.org/1.0/blog/routing

И Readme.md в репозитории Github весьма поучительно:

https://github.com/PolymerElements/app-route

Для базовой функциональности необходимы два элемента: <app-location> и <app-route>

Ниже приведен простой пример:

<app-location route="{{route}}"></app-location>
<app-route
    route="[[route]]"
    pattern="/users"
    active="{{usersRouteIsActive}}">
</app-route>

В приведенном выше примере usersRouteIsActive получит логическое значение, true, если маршрут соответствует /users, а false, если это не так. Простой, не так ли? После этого, когда ваши маршруты приложений становятся более сложными, элемент приложения-маршрута имеет больше функций, которые будут поддерживать эти потребности.

Ответ 3

Попробуйте использовать "dna-router". Он относительно новый и поддерживает Polymer-1.0. Вы можете создать маршрутизацию только в html.

Dna-router также поддерживает аутентификацию пользователя. Вы можете передать статус входа в систему и данные журнала в своем элементе "dna-config". Маршрутизатор покажет страницу, основанную на статусе входа. Вы можете объявить, какие состояния требуют аутентификации пользователя.

Он все еще находится в стадии разработки и имеет некоторые сбои в нем. Но стоит попробовать.

Github: https://github.com/Saquib764/dna-router/

Ответ 4

Ответ зависит от типа используемого маршрутизатора. Я был недоволен состоянием маршрутизаторов Polymer, поэтому я написал excess-router. С помощью этого маршрутизатора вы должны:

  • определить ваши маршруты и сделать /content маршрут по умолчанию
  • настроить маршрутизатор для запуска вручную
  • запустите маршрутизатор вручную при подписании
<excess-router-config manual-start></excess-router-config>
<excess-route route="/content"></excess-route>
<excess-route route="/(.*)" redirect-to="/content" activation-modifiers="x"></excess-route>

<script>
  function onSignedIn() {
    Excess.RouteManager.start();
  }
</script>

Ответ 5

Я решаю эту проблему, просто добавляя в шаблон страницы этот код:

<script>
    Polymer({
        is: 'home-page'
    });
</script>

Код полной страницы:

<link href="../bower_components/polymer/polymer.html" rel="import">
<dom-module id="home-page">
   <template>
      <div>Home page</div>
   </template>

   <script>
      Polymer({
         is: 'home-page'
      });
   </script>
</dom-module>

Ответ 6

В соответствии с Полимером 1.4 может использоваться углеродный маршрут (позднее переименованный маршрут приложения):

Вот пример, взятый из полимерного блога:

<carbon-location route="{{route}}">
</carbon-location>

<carbon-route route="{{route}}" pattern="/tabs/:tabName" data="{{data}}">
</carbon-route>

<paper-tabs selected="{{data.tabName}}" attr-for-selected="key">
  <paper-tab key="foo">Foo</paper-tab>
  <paper-tab key="bar">Bar</paper-tab>
  <paper-tab key="baz">Baz!</paper-tab>
</paper-tabs>

<neon-animated-pages selected="{{data.tabName}}"
                     attr-for-selected="key"
                     entry-animation="slide-from-left-animation"
                     exit-animation="slide-right-animation">
  <neon-animatable key="foo">Foo Page Here</neon-animatable>
  <neon-animatable key="bar">Bar Page Goes Here</neon-animatable>
  <neon-animatable key="baz">Baz Page, the Best One of the Three</neon-animatable>
</neon-animated-pages>

См. также аналогичный вопрос: Маршрутизация в полимерах 1.0