如何在聚合物 3 中包含外部 html 文件和 js 文件?

Posted

技术标签:

【中文标题】如何在聚合物 3 中包含外部 html 文件和 js 文件?【英文标题】:How to include external html file and js file in polymer 3? 【发布时间】:2019-03-08 07:05:18 【问题描述】:

我正在尝试将 html 部分与聚合物 3.0 中的 .js 分开。 如何在 .js 中包含外部 html 文件? 要么 我怎样才能把它们分开?

import html, PolymerElement from '@polymer/polymer/polymer-element.js';
/**
 * @customElement
 * @polymer
 */
class InfyAssign extends PolymerElement 
  static get template() 
    return html`
    <style>
    :host 
      display: block;
    
    
  </style>
  <div class="row">
  <div class="col-md-3">
      Hello
  </div>
    <div>
      <img src="../../images/image1.jpg">
    </div>
  </div>
 
    `;
  

【问题讨论】:

【参考方案1】:

首先,我不建议您将 html 部分分离到另一个文件中。如果您觉得您的组件太大,只需将其分离到另一个组件中即可。

因为它是一个 javascript 文件(ES6 模块),所以它不能直接导入 html,但你可以将 template 函数分离到另一个文件并导入它。

index.html

<my-app></my-app>
<script type='module' src='app.js'></script>

app.js

import  PolymerElement  from '@polymer/polymer/polymer-element.js'
import home from './home.js'

class App extends PolymerElement 
  static get properties () 
    return 
      count: Number
    
  

  static get template () 
    return home()
  

  constructor () 
    super()
    this.count = 0
  

  increaseCount () 
    this.count += 1
  


customElements.define('my-app', App)

home.js

import  html  from '@polymer/polymer/polymer-element.js'

export default function () 
  return html`
    <h1>Home</h1>
    <h2>Count: count</h2>
    <button on-click='increaseCount'>Increase</button>
  `

如果你想要一个真正的 html 文件。您可以使用fetch 下载html 文件并将其解析为template 函数。

app.js

import  PolymerElement, html  from '@polymer/polymer/polymer-element.js'

class App extends PolymerElement 
  static get properties () 
    return 
      count: Number
    
  

  constructor () 
    super()
    this.count = 0
  

  increaseCount () 
    this.count += 1
  


fetch('home.html')
  .then(response => response.text())
  .then(text => 
    Object.defineProperty(App, 'template', 
      get: function () 
        return eval(`html\`$text\``)
      
    )
    customElements.define('my-app', App)
  )

home.html

<h1>Home</h1>
<h2>Count: count</h2>
<button on-click='increaseCount'>Increase</button>

或者您可以使用像 Webpack 这样的捆绑库,它允许您将 html 文件(通过加载器)导入到您的 javascript 文件中。

见polymer-skeleton 和这个article。

【讨论】:

以上是关于如何在聚合物 3 中包含外部 html 文件和 js 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应中包含外部javascript

如何在 Laravel 的外部 js 文件中包含 csrf_token()?

如何在 HTML 文件中包含 npm 包?

如何在 CodeIgniter 中包含外部库?

如何在聚合中包含下一组的第一行?

如何在 maven jar 构建过程中包含外部 jar?