polymer web components
play

POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete - PowerPoint PPT Presentation

POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson @petejohanson / Applications Existing Frameworks Web Components (Polymer?) Web Platform NO PANACEA CONSIDERATIONS Progressive Enhancement Challenges Server Side


  1. POLYMER & WEB COMPONENTS GETTING STARTED WITH POLYMER Pete Johanson @petejohanson /

  2. Applications Existing Frameworks Web Components (Polymer?) Web Platform

  3. NO PANACEA

  4. CONSIDERATIONS Progressive Enhancement Challenges Server Side Rendering? Browser Support

  5. EXISTING APPROACHES <head> <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery­ui.css" <script src="//code.jquery.com/jquery­1.10.2.js"></script> <script src="//code.jquery.com/ui/1.11.4/jquery­ui.js"></script> <script> $(function() { $( "#menu" ).menu({ disabled: true }); }); </script> </head> <body> <ul id="menu"> <li>Item 1</li> <li>Item 2</li> </ul>

  6. POLYMER <head> <link rel="import" href="paper­item/paper­item.html"> <link rel="import" href="paper­menu/paper­menu.html"> <head> <body> <paper­menu selected="1"> <paper­item>Item 1</paper­item> <paper­item>Item 2</paper­item> </paper­menu> </body>

  7. FEATURES Declared Properties Local/Light DOM Data Binding Events Scoped Styles and Custom CSS Properties

  8. DECLARED PROPERTIES Polymer({ is: 'my­gravatar', properties: { email: String, size: { type: String, value: '' }, /* ... */ } });

  9. COMPUTED PROPERTIES Polymer({ is: 'my­gravatar', properties: { email: String, size: String, imgsrc: { type: String, computed: 'computeImageSource(email, size)' } }, computeImageSource: function(email, size) { return ...; } });

  10. CHANGE NOTIFICATION Needed for two-way data binding Polymer({ is: 'my­chooser', properties: { choice: { type: String, notify: true, } }, });

  11. LOCAL (SHADOW) DOM <dom­module id="my­gravatar"> <template> <img src="{{imgsrc}}"> </template> ... </dom­module>

  12. AUTOMATIC NODE FINDING <dom­module id="my­gravatar"> <template> <img id="gravatar"> </template> <script> Polymer({ is: 'my­gravatar', ready: function() { this.$.gravatar.src = '//gravatar.com/avatar/abcdef'; } }); </script> </dom­module>

  13. DOM MANIPULATION Local DOM var toLocal = document.createElement('div'); var beforeNode = Polymer.dom(this.root).childNodes[0]; Polymer.dom(this.root).insertBefore(toLocal, beforeNode); Light DOM Polymer.dom(this).appendChild(document.createElement('div')); var allSpans = Polymer.dom(this).querySelectorAll('span');

  14. LIGHT DOM <dom­module id="my­strongbad"> <template> <strong><content></content></strong> </template> ... </dom­module>

  15. <my­strongbad>Deleted!</my­strongbad>

  16. DATA BINDING <dom­module id="my­gravatar"> <template> <input type="text" value={{email::input}}></input> <input type="text" value={{size::input}}></input> <img src="{{imgsrc}}"> </template> ... </dom­module>

  17. ONE-WAY VS TWO-WAY BINDINGS <template> <my­gravatar email="[[email]]"></my­gravatar> </template> <template> <my­chooser choice="{{choice}}"></my­chooser> </template>

  18. ONE-WAY BINDING Host-To-Child <template> <my­gravatar email="[[email]]"></my­gravatar> <input type="text" value="{{email::input}}"> </template> <script> Polymer({ is: 'my­element', properties: { email: String, }, }); </script>

  19. TWO-WAY BINDING Bi-directional between child and host <template> <my­chooser choice="{{type}}"></my­chooser> </template> <script> Polymer({ is: 'my­element', properties: { type: String, }, }); </script>

  20. EVENTS Declarative event listeners Annotated event listeners Custom Event Firing

  21. DECLARATIVE EVENT LISTENERS Polymer({ is: 'x­custom', listeners: { 'tap': 'regularTap', 'special.tap': 'specialTap' }, regularTap: function(e) { alert("Thank you for tapping"); }, specialTap: function(e) { alert("It was special tapping"); } });

  22. ANNOTATED EVENT LISTENERS <button on­click="buttonClick">Click Me</button>

  23. EVENT FIRING <dom­module id="x­custom"> <template> <button on­click="handleClick">Kick Me</button> </template> <script> Polymer({ is: 'x­custom', handleClick: function(e, detail) { this.fire('kick', {kicked: true}); } }); </script> </dom­module>

  24. STYLING

  25. SCOPED STYLES <template> <style> :host { /* Selector to style the host DOM element */ display: block; } .content­wrapper > ::content .warning { /* Light DOM */ color: red; } </style> <div class="content­wrapper"><content></content></div> </template>

  26. CROSS SCOPE STYLES "Theming" <template> <style> :host { /* Selector to style the host DOM element */ display: block; } .content­wrapper > ::content .warning { /* Light DOM */ color: var(­­my­element­warning­color, red); } </style> <div class="content­wrapper"><content></content></div> </template>

  27. CSS MIXINS <template> <style> :host { /* Selector to style the host DOM element */ display: block; @apply(­­my­element­theme); } </style> </template> <style> :host { ­­my­element­theme { background­color: green; } } </style>

  28. ELEMENT CATALOG

  29. POLYMER STARTER KIT Best Practices Baked In Build Offline Support Testing

  30. $ wget https://github.com/PolymerElements/polymer­starter­kit/releases/download/v1. $ unzip polymer­starter­kit­1.0.3.zip $ cd polymer­starter­kit­1.0.3 $ npm install && bower install $ gulp serve

  31. SLIDES http://petejohanson.github.io/nerdsummit-2015-polymer

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend