标签: web-component

如何选择以特定字符串结尾的标签?

我正在开始使用 Web 组件,并希望获取标签名称以“-component”结尾的所有元素,以便将它们注册为自定义标签。

为了获得最佳性能,我想使用 querySelectorAll而不是迭代所有元素

但是,正如您在下面的示例中看到的那样,[tag$="-component"]没有找到该元素。

const components = document.querySelectorAll('[tag$="-component"]');
const result = document.querySelector('.result');

result.innerHTML = 'Search started<br>';

for(var i = 0; i < components.length; i++){
 
  result.innerHTML = result.innerHTML + components[i].tagName + '<br>';
 
}
Run Code Online (Sandbox Code Playgroud)
<my-component>

  <hello-world-component>
  
    <h1>Hello, world!</h1>
  
  </hello-world-component>

</my-component>

<div class="result"></div>
Run Code Online (Sandbox Code Playgroud)

如果有人知道发生了什么事并且可以让我知道,或者如果有人知道这是否可能,我将不胜感激。

html javascript web-component

5
推荐指数
1
解决办法
329
查看次数

如何从自定义 Web 组件中提取表单提交的数据?

我需要了解表单提交如何从自定义 Web 组件中提取数据?

我尝试了以下步骤

1- 将输入附加到ShadoWroot
2- 使用表单关联的概念将输入值和名称与表单连接起来
3- 最后提交表单以获取FormData

不幸的是,它没有成功。我没有从FormData

// https://web.dev/more-capable-form-controls/
// https://webkit.org/blog/13711/elementinternals-and-form-associated-custom-elements/
// https://html.spec.whatwg.org/#custom-elements

let form = document.getElementById('frm');

// on form submit I need to recive form data from the input by getting name and its value
form.addEventListener('submit', (event) => {
    event.preventDefault();
    var formData = new FormData(form);
    // Display the key/value pairs
    for (const pair of formData.entries()) {
      console.log(`${pair[0]}, ${pair[1]}`);
    }

});

// I need here to assign value to form data using …
Run Code Online (Sandbox Code Playgroud)

javascript form-data web-component

5
推荐指数
1
解决办法
843
查看次数

如何在Polymer元素定义中分配HTML实体?

备选问题版本:在Polymer元素定义中添加时,如何防止HTML实体被转义?

因此,假设这个简化的例子(所有包含的聚合物库都添加在实际代码中):

元素定义

<polymer-element name="x-test" attributes="val">
  <template>
    <div>{{shownVal}}</div>
  </template>
  <script>
    Polymer( 'x-test', {
      shownVal: '',
      valChanged: function(){
        this.shownVal = this.val + ' &amp;';
      }
  });
  </script>
</polymer-element>
Run Code Online (Sandbox Code Playgroud)

元素用法

<x-test val="123"></x-test>
Run Code Online (Sandbox Code Playgroud)

这将产生如下输出:

123&

版本:聚合物0.1.2

我需要更改/添加什么输出123 &

或者这是一种什么样的错误,我应该让Polymer人知道吗?

我知道,我可以添加实体<template>,这可以工作,但我有一些代码,它修改输入属性,需要使用实体.


注意:如果使用这样的元素

<x-test val="123 &amp;"></x-test>
Run Code Online (Sandbox Code Playgroud)

一切都很好.

html javascript web-component polymer

4
推荐指数
1
解决办法
1176
查看次数

Polymer:如何动态导入元素

任何人都可以告诉我如何根据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>
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript web-component polymer

4
推荐指数
2
解决办法
4736
查看次数

使用Polymer扩展本机HTML元素

您好我想从使用Polymer的本机HTML元素扩展以创建自定义Web组件.当我没有扩展时,我的聚合物就绪回调就被调用了.一旦我延伸,就不会再调用任何东西了.虽然正在创建元素的阴影DOM ...

这是我的用法代码:

<!DOCTYPE html>
<html>
    <head>
    <title>Custom Component Usage</title>
        <script src="bower_components/platform/platform.js"></script>
        <link rel="import" href="elements/extended-item.html">
    </head>
    <body>
        <extended-item>I was extended from div!</extended-item>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

自定义元素,扩展div:

<link rel="import" href="../bower_components/polymer/polymer.html">

<polymer-element name="extended-item" extends="div">

    <template>

        <content></content>

    </template>

</polymer-element>

<script>
Polymer('extended-item',
        {
            created: function ()
            {
                console.log('EXTENDED ITEM IS CREATED!');
            },
            ready: function ()
            {
                console.log('EXTENDED ITEM IS READY!');
            },
            attached: function ()
            {
                console.log('EXTENDED ITEM IS ATTACHED!');
            },
            domReady: function ()
            {
                console.log('EXTENDED ITEMS DOM IS READY!');
            },
            detached: function () …
Run Code Online (Sandbox Code Playgroud)

html dom web-component polymer

4
推荐指数
1
解决办法
2449
查看次数

清理自定义元素中的事件侦听器

在注册事件监听器时attachedCallback,我有责任确保再次删除这些监听器detachedCallback吗?

如下面的最小样本所示,模式是可预测的,所以我想知道浏览器是否已经处理了这个问题?

<my-element>0</my-element>
Run Code Online (Sandbox Code Playgroud)
class MyElement extends HTMLElement {
    createdCallback() {
        this.update = this.update.bind(this);
    }

    attachedCallback() {
        this.addEventListener("click", this.update);
    }

    detachedCallback() {
        this.removeEventListener("click", this.update);
    }

    update() {
        this.textContent = Math.random();
    }
}

document.registerElement("my-element", {
    prototype: MyElement.prototype
});
Run Code Online (Sandbox Code Playgroud)

javascript web-component custom-element

4
推荐指数
1
解决办法
571
查看次数

从包含其中的viewmodel访问组件视图模型

我正在使用knockout.js组件和require.js.这到目前为止运作良好,但我正在努力解决以下问题.

假设我在一个非常简单的html页面中有一个我的组件实例:

<div id="exams">
    <databound-exam-control></databound-exam-control>
</div>
Run Code Online (Sandbox Code Playgroud)

从包含viewmodel:

require(['knockout', 'viewModel', 'domReady!'], function (ko, viewModel) {
    ko.components.register('databound-exam-control', {
        viewModel: { require: 'databound-exam-control-viewmodel' },
        template: { require: 'text!databound-exam-control-view.html' }
    });

    ko.applyBindings(new viewModel());
});
Run Code Online (Sandbox Code Playgroud)

我希望获得子视图模型内容,以便稍后在单击按钮时保存页面的所有数据.

现在我只想在pre标签中显示父/子视图模型的显示:

<div>
    <pre data-bind="text: childViewModel()"></pre>
</div>
Run Code Online (Sandbox Code Playgroud)

在包含viewmodel的帮助下:

function childViewModel() {
        var model = ko.dataFor($('databound-exam-control').get(0).firstChild);
        return ko.toJSON(model, null, 2);
};
Run Code Online (Sandbox Code Playgroud)

在调用ko.dataFor期间出现以下错误,可能是因为页面未完全呈现:

除非指定"写入"选项,否则无法将值写入ko.computed.如果要读取当前值,请不要传递任何参数.

是吗?或者我完全错过了这里的观点?

任何帮助赞赏.

javascript web-component requirejs knockout.js

4
推荐指数
1
解决办法
1590
查看次数

HTMLImports.whenReady和window.addEventListener('WebComponentsReady',function(e){`之间有什么区别

HTMLImports.whenReady 和之间有什么区别window.addEventListener('WebComponentsReady', function(e) {

Polymer的官方文档说:

“要在您的主HTML文档中定义元素,请从HTMLImports.whenReady(callback)定义该元素。当文档中的所有导入均已完成加载时,将调用回调。”

Webcomponents.org关于进口的官方文件说:

在本机导入下,主文档中的标签会阻止加载导入。这是为了确保导入已加载,并且其中的所有注册元素都已升级。这种本机行为很难进行polyfill,因此“ HTML导入” polyfill不会尝试。而是WebComponentsReady事件是此行为的代表:

两者有什么区别?

javascript web-component polymer custom-element html-imports

4
推荐指数
1
解决办法
2057
查看次数

如何将常见的CSS样式同时应用于多个Shadow Roots?

考虑一下,我使用Shadow DOM隐藏其内部div-soup和布局的元素很少.

即使是艰难的,它们也是不同的,它们共享相同的CSS样式表,因为它们使用的是相同的元素集,这些元素应该以一致的方式进行样式化.例如,这可以是CSS框架(引导程序).

问题是这个样式表非常大.

在许多Shadow Roots(在SD V1中)之间分享如此大样式表的最有效方法是什么?

html javascript css web-component shadow-dom

4
推荐指数
1
解决办法
699
查看次数

Web组件(本机UI)之间如何通信?

我正在尝试为我的UI项目之一使用本机Web组件,并且对于此项目,我没有使用任何框架或库(例如Polymer等)。我想知道在两者之间有什么最佳的交流方式或其他方式像我们在angularjs / angular中所做的那样的Web组件(例如消息总线概念)。

当前,在UI Web组件中,我正在使用dispatchevent发布数据和接收数据,正在使用addeventlistener。例如,有2个Web组件,ChatForm和ChatHistory。

// chatform webcomponent on submit text, publish chattext data 
this.dispatchEvent(new CustomEvent('chatText', {detail: chattext}));

// chathistory webcomponent, receive chattext data and append it to chat list
this.chatFormEle.addEventListener('chatText', (v) => {console.log(v.detail);});
Run Code Online (Sandbox Code Playgroud)

请让我知道实现此目的的其他方法。任何可以轻松与本机UI Web组件集成的优秀库,如postaljs等。

html javascript web-component custom-element native-web-component

4
推荐指数
3
解决办法
777
查看次数