如何使用Web组件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Web组件相关的知识,希望对你有一定的参考价值。

亲爱的聚合物社区,

我很难学习聚合物并遵循网络上的文档和教程。

我是一位经验丰富的服务器端C ++和Java开发人员。但我与前端和网络开发的关系从来没有顺利过。

也许这是因为Web开发不断变化,文档和教程假设用户带来了以前Web框架的一些经验。

几年前,我不得不为我的团队正在开发的嵌入式盒子实现一个Web界面。我使用bootstrap和AngularJs完成了Web组件。我非常喜欢这个项目,与为嵌入式平台编写c ++相比,这是一个清新的空气。我也非常喜欢AngularJs如何将MVC模式应用到网页中。

快进到现在,现在谷歌聚合物和网络组件都是新的时尚潮流。

通过聚合物教程并阅读一些关于Web组件的内容。我认为重用Web组件是个好主意。只需浏览庞大的现有Web组件库,选择您想要的内容即可。理论上听起来不错......除了......像我这样的新手到目前为止一直无法正确使用单个Web组件。

我发现文档缺乏,示例代码不准确。让我来看一个简单的例子。我想要使​​用的一个Web组件是iron-pages。令人敬畏的Web组件,这正是我需要的!

我阅读了iron-pages的文档并查看了webcomponents.org上的演示,现在是时候使用它了。除了我不能让事情发挥作用。

这正是我在命令行中使用polymer-cli所做的

mkdir my-app
cd my-app
polymer init

我选择了聚合物-2应用

我试试我的应用程序

polymer serve --open

华友世纪它显示你好我的应用程序的应用程序!在网页上

接下来我尝试使用iron-pages Web组件。所以我需要使用bower下载该组件

bower install --save PolymerElements/iron-pages

iron-pages的演示列出了here以及示例代码。但是示例代码与Web组件中应该出现的内容不匹配...或者至少我在使用web组件的教程中读到的内容。

该示例代码中没有标记。有一个标签不应该在那里。我相信一位经验丰富的网络开发人员会知道如何弥合差距......但不是我。

我尽力调整iron-pages示例代码以适应我的文件src/my-app-app/my-app-app.html

这是我的代码:

<link rel="import" href="../../bower_components/polymer/polymer-element.html">
<link rel="import" href="../../bower_components/iron-pages/iron-pages.html">

<dom-module id="my-app-app">
  <template>
    <style>
      :host {
        display: block;
      }

      iron-pages {
        width: 100%;
        height: 200px;
        font-size: 50px;
        color: white;
        text-align: center;
      }

      iron-pages div {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        justify-content: center;
      }

      iron-pages div:nth-child(1) {
        background-color: var(--google-blue-500);
      }

      iron-pages div:nth-child(2) {
        background-color: var(--google-red-500);
      }

      iron-pages div:nth-child(3) {
        background-color: var(--google-green-500);
      }

    </style>

    <h2>Hello [[prop1]]!</h2>

    <iron-pages selected="0">
       <div>One</div>
       <div>Two</div>
       <div>Three</div>
    </iron-pages>

  </template>

  <script>
    /**
     * @customElement
     * @polymer
     */
    class MyAppApp extends Polymer.Element {
      static get is() { return 'my-app-app'; }
      static get properties() {
        return {
          prop1: {
            type: String,
            value: 'my-app-app'
          }
        };
      }
    }

    window.customElements.define(MyAppApp.is, MyAppApp);

    var pages = document.querySelector('iron-pages');
    pages.addEventListener('click', function(e) {
       pages.selectNext();
    });

  </script>
</dom-module>

iron-pages没有出现在网页上。 chrome上的开发人员控制台显示错误,我试图在空指针上执行addEventListener。所以我试着注释掉addEventListener部分。即使我无法点击在页面之间旋转,我仍然希望看到其中一个iron-pages。但铁页仍然没有出现。

如果您有经验的网络开发者可以启发我,我将不胜感激。我还有其他我无法完美使用的网络组件的例子,例如app-toolbar,我无法让iron-icon出现......即使我在bower安装铁图标。无论如何,如果我能开始把我的iron-pages连接起来,我会很高兴。

答案

删除引号并使用如:bower install --save PolymerElements/iron-pages

而不是:bower install --save PolymerElements/'iron-pages'

而且你的代码'iron-pages'中的所有单引号都只使用iron-pages

DEMO

<link rel="import" href="../../bower_components/polymer/polymer-element.html">
<link rel="import" href="../../bower_components/iron-pages/iron-pages.html">

<dom-module id="my-app-app">
  <template>
    <style>
  :host {
    display: block;
  }

  iron-pages {
    width: 100%;
    height: 200px;
    font-size: 50px;
    color: white;
    text-align: center;
  }

  iron-pages div {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: center;
  }

  iron-pages div:nth-child(1) {
    background-color: var(--google-blue-500);
  }

  iron-pages div:nth-child(2) {
    background-color: var(--google-red-500);
  }

  iron-pages div:nth-child(3) {
    background-color: var(--google-green-500);
  }

</style>

<h2>Hello [[prop1]]!</h2>

<iron-pages selected="0">
   <div>One</div>
   <div>Two</div>
   <div>Three</div>
</iron-pages>

<script>
 /**
 * @customElement
 * @polymer
 */
class MyAppApp extends Polymer.Element {
  static get is() { return 'my-app-app'; }
  static get properties() {
    return {
      prop1: {
        type: String,
        value: 'my-app-app'
      }
    };
  }
}

window.customElements.define(MyAppApp.is, MyAppApp);

var pages = document.querySelector('iron-pages');
pages.addEventListener('click', function(e) {
   pages.selectNext();
});

另一答案

你正在获得空指针,因为在你的课外设置一个事件。除了类注册(customElements.define ...)之外,不应该有代码

通常在Polymer中,您应该在ready回调中设置侦听器。

这里的自定义元素生命周期:https://www.polymer-project.org/2.0/docs/devguide/custom-elements

在你的情况下:

 ready() {
    super.ready();
    var pages = document.querySelector('iron-pages');
    pages.addEventListener('click', function(e) {
       pages.selectNext();
    });
  }

以上是关于如何使用Web组件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用导航架构组件从片段中获取结果?

如何使用导航架构组件查找子片段

如何找出前一个片段正在使用导航组件

如何在片段 xml 中使用自定义组件?

如何使用导航组件处理片段内的向上按钮

如何使用底部导航视图和 Android 导航组件将参数传递给片段?