Search code examples
javascriptpolymerpolymer-1.0

Preselect a default page in iron-pages when using with paper-tabs


I am using Polymer iron-pages along with paper-tabs in my rails app. The problem is none of pages were shown until one of the paper-tabs was clicked. I want the first page in iron-pages to be selected by default without user interaction.

I have put both paper-tabs and iron-pages in a <template is='dom-bind'></template>. Have read documentation about data binding, But I couldn't figure out how to achieve this. Please somebody suggest your valuable suggestions. Thank you.

<template is="dom-bind">
  <div class="middle">
    <paper-tabs class="bottom self-end" selected="{{selected}}">
      <paper-tab>Page 1</paper-tab>
      <paper-tab>Page 2</paper-tab>
    </paper-tabs>
  </div>
  <div class="bottom">
    <iron-pages selected="{{selected}}">
      <div> Page 1(This should be selected by default.)
      </div>
      <div> Page 2
      </div>
    </iron-pages>
  </div>
</template>

Solution

  • Since you're working with an auto-binding template, simply add a short script that sets the selected property of your <iron-pages> element at load time. For example (assuming you are using webcomponents-lite.js):

    <template is="dom-bind">
      <div class="middle">
        <paper-tabs class="bottom self-end" selected="{{selected}}">
          <paper-tab>Page 1</paper-tab>
          <paper-tab>Page 2</paper-tab>
        </paper-tabs>
      </div>
      <div class="bottom">
        <iron-pages selected="{{selected}}">
          <div> Page 1 (This will be selected by default.)
          </div>
          <div> Page 2
          </div>
        </iron-pages>
      </div>
    </template>
    
    <script>
      document.addEventListener('WebComponentsReady', function () {
        var template = document.querySelector('template[is="dom-bind"]');
        template.selected = 0; // selected is an index by default
      });
    </script>