将数据传递到另一个Polymer组件

时间:2017-03-24 14:17:54

标签: polymer polymer-1.0 web-component

我正在制作一个仪表板,其中我在顶部有一个搜索面板(让我们称之为组件A),用户可以在其中输入查询。此输入的值将更改仪表板中的许多其他组件(不仅是作为其直接后代或兄弟姐妹的组件)。我想将搜索值从组件A发送到组件B,组件B应该通过对输入值执行一些操作来响应。

我尝试了一些事情:

  1. 直接调用组件B中的函数.Haven完全可以使用它。
  2. 手动设置B的本地属性值并使用观察者触发函数调用。我经理设置值,但观察者不会触发。
  3. 使用全局变量,我可以轻松访问组件,但我仍然无法触发特定组件中的功能。
  4. 我怎样才能做到最好? 我对Polymer来说比较新,所以请原谅我,如果我的想法不是完全的,那就是聚合的' :)

    方法1

    <dom-module id="component-B">
      <template>
      </template>
      <script>
        Polymer({
          is: 'component-B',
          properties: {
            id: '',
            observer: '_idUpdate'
          },
          _idUpdate: function(){
            console.log("HELLO");
          }
        });
      </script>
    </dom-module>
    
    <dom-module id="component-A">
      <template>
      </template>
      <script>
        Polymer({
          is: 'component-A',
          idSearch: function() {
            var id = this.$.search.value;
            document.querySelector('component-B').properties.id = id;
          },
        });
      </script>
    </dom-module>
    

1 个答案:

答案 0 :(得分:1)

由于您希望将数据发送到多个元素(可能不是触发元素的兄弟元素),您可以使用这两种方法中的任何一种

  • 使用iron-signal触发信号,然后使用您想要数据的所有元素使用铁号信号来收听信号

     <iron-signals on-iron-signal-<signal-name>="<function>"></iron-signals>
    
  • 您还可以使用标准HTML方法dispatchEvent触发信号,然后在您想要数据的所有元素中添加eventListeners