有人能告诉我如何根据Polymer属性的值导入元素吗? 我以为我可以使用数据绑定但是...它不起作用。是否可以动态导入元素?
代码例如:
<link rel="import" href="app-window/{{name}}-app.html">
//This was my first idea (obviously doesn't work)
<polymer-element name="window-base" attributes="name" >
<template>
<link rel="stylesheet" href="window-base.css">
<section id="app">
<!--here will go the instance-->
</section>
</template>
<script>
Polymer('window-base', {
name: "Finder",
ready: function () {
this.instanceApp();
},
instanceApp: function () {
//this depends on the import made
var app=document.createElement(this.name + "-app");
this.$.app.appendChild(app);
}
});
</script>
</polymer-element>
谢谢!
答案 0 :(得分:9)
根据Polymer 1.0迁移指南:
全局Polymer.import函数由importHref替换。新的 方法可以作为this.importHref从元素中调用。在外面 element,可以称为Polymer.Base.importHref。
因此...
this.importHref(["yourComponent.html"], function() {})
答案 1 :(得分:6)
这是我用于动态导入元素的方法。我使用vulcanizer将我的元素拆分为逻辑模块。然后我使用Polymer.import:
聚合物0.5
Polymer.import( ['/elements/'+this.module+'-module.html'], function() {
console.log('/elements/'+this.module+'-module.html loaded');
this.onComplete();
}.bind(this));
更新Polymer 1.0
只需使用链接[rel =&#34; import&#34;]标记
即可var link = document.createElement('link');
link.setAttribute('rel', 'import');
link.setAttribute('href', 'elements/app-module.html');
document.body.appendChild(link)
答案 2 :(得分:0)
这样的事情怎么样?我还没有对其进行测试(WebComponentsReady事件可能只在窗口上触发),但是如果你可以发布一个有用的jsbin或codepin:
Polymer('window-base', {
name: 'Finder',
domReady: function() {
this.nameChanged();
},
nameChanged: function() {
var importElem = document.createElement('link');
importElem.rel = 'import';
importElem.href = 'app-window/' + name + '-app.html';
importElem.addEventListener('WebComponentsReady', function() {
var app = document.createElement(this.name + "-app");
this.$.app.appendChild(app);
}.bind(this));
this.appendChild(importElem);
}
});
答案 3 :(得分:0)
公认的解决方案也适用于Polymer 2
Polymer.importHref([`bower_components/${plugin}/${plugin}.html`], () => {
//on load
}