2015-06-05 14 views
15

Sono nuovo di Polymer. Mi metto a scrivere un semplice webapp in cui 1. L'utente prima terra in una pagina di login 2. Se l'utente passa di accesso, allora l'utente direttamente al contenuto della paginaPolymer 1.0 - routing

scrivo un elemento "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's prototype 
    properties: { 
     // declare properties for the element's 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> 

su index.html (pagina principale), io uso

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

domanda: nel callback onSignedIn(), avrei percorso la mia pagina/contenuto. Come posso fare?

EDIT 1: Come @zacharytamas suggeriscono, cerco di usare app-router come segue

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> 

casa-page.html

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

mostra un pagina vuota quando sfoglio sia su http://localhost:3000/ e http://localhost:3000/test su Chrome. Qualche idea?

risposta

26

Il polimero non ha routing incorporato in esso di default. Esistono tuttavia diversi framework di routing front-end che è possibile utilizzare con Polymer.

Un approccio molto utilizzato è un elemento personalizzato chiamato app-router, che consente di definire i percorsi in modo dichiarativo con solo HTML. Ho avuto qualche successo con esso prima. Controlla the website per informazioni sulla configurazione.

Un altro modo basato su HTML per farlo è un elemento personalizzato creato da un membro del team Polymer chiamato more-routing. Google ha una serie di video su Polymer denominata Polycasts che . Dovresti controllare quel video per informazioni su come iniziare.

Un'altra opzione è farlo con JavaScript utilizzando page.js framework. Questo è il metodo utilizzato Polymer Starter Kit. Here's another Polycast per iniziare così.

Benvenuti nel mondo Polymer!

+0

Sembra che l'app-rooter non supporti ancora Polymer 1.0 –

+0

Hmm. L'ho usato con Polymer 0.9 la scorsa settimana e l'API tra 0.9 e 1.0 è molto simile. Hai un errore o semplicemente non funziona? – zacharytamas

+0

Sì, ho riscontrato problemi con l'app-router. Vedi il mio EDIT sulla domanda –

2

Provare a utilizzare "dna-router". È relativamente nuovo e supporta Polymer-1.0. È possibile creare il routing esclusivamente in html.

Il Dna-router supporta anche l'autenticazione dell'utente. È possibile passare lo stato di accesso e i dati di accesso nel suo elemento 'dna-config'. Il router mostrerà la pagina in base allo stato di accesso. È possibile dichiarare quali stati richiedono l'autenticazione dell'utente.

È ancora in fase di sviluppo e presenta alcuni problemi. Ma vale la pena provare.

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

+0

Perché downvotare questa risposta? – LoveGandhi

2

La risposta dipende dal tipo di router utilizzato. Non ero soddisfatto dello stato dei router Polymer, quindi ho scritto excess-router.Con questo router, si dovrebbe:

  • definire i percorsi, e fare /content è un percorso di default del router
  • Configura per essere avviato manualmente
  • avviare il router manualmente signin
<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> 
+1

Non ho giocato troppo, ma sembra funzionare effettivamente con 1.0, che è meglio di qualsiasi opzione propagandata nella risposta accettata. –

1

Risolve questo problema aggiungendo semplicemente nel modello di pagina questo codice:

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

codice della pagina completa:

<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> 
1

A partire dal polimero 1,4, carbonio-percorso (in seguito ribattezzata app-percorso) può essere utilizzato:

Ecco un esame PLE preso dal blog di polimero:

<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> 

vedi domanda anche simile: Routing in polymer 1.0

8

Buone notizie! Il team di Polymer ha rilasciato un router ufficiale. Un'ottima introduzione è disponibile sul loro blog:

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

E il Readme.md sul repo Github è molto istruttivo:

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

ci sono due elementi necessari per le funzionalità di base, <app-location> e <app-route>

Quello che segue è un semplice esempio:

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

Nell'esempio di cui sopra usersRouteIsActive riceveranno un valore booleano, true se il percorso corrisponde /users, e falso se non lo fa. Semplice, vero? Dopodiché, quando le rotte dell'applicazione diventano più complicate, l'elemento di instradamento delle app ha più funzionalità che supporteranno tali esigenze.

Problemi correlati