标签: web-component

ReactJS - Disabling a component

I need to disable PostList component in its initial state.

import React from 'react';
import PostList from './PostList';

const App = () => {
    return (
        <div className="ui container">
             <PostList />
        </div>
    );
};

export default App;
Run Code Online (Sandbox Code Playgroud)

Whats the best way to disable (and grey out) a component? Possible solutions are to pass a value as props and then apply it to a ui element, However please keep in mind that PostList may have inner nested components as well. Please …

javascript disabled-input web-component reactjs

0
推荐指数
1
解决办法
5143
查看次数

如何使用 Web 组件创建自定义元素?

我正在尝试创建自定义元素...

我的第一个选择:

JS:在此处输入图片说明

class AwesomeButtonComponent extends HTMLButtonElement {
    constructor() {
        super();

        this.addEventListener('click', () => {
            alert('Great job!');
        });
    }
}

customElements.define('awesome-button', AwesomeButtonComponent, {extends: 'button'});
Run Code Online (Sandbox Code Playgroud)

HTML: <awesome-button>CLICK ME</awesome-button>


我的第二个选择:

JS:

customElements.define('awesome-button', Object.create(HTMLButtonElement.prototype), {
       extends: 'button'
    });
Run Code Online (Sandbox Code Playgroud)

HTML: <awesome-button>CLICK ME</awesome-button>

08.07.2019<button is="awesome-button">CLICK ME</button>

我的每一次尝试都变成了一个简单的元素。如何正确创建从本机扩展的自定义元素?

在此处输入图片说明

js、vue、html5

html javascript web-component custom-element

0
推荐指数
1
解决办法
264
查看次数

为什么 open-wc 脚手架推广 lit-html

我在一家拥有大型 webcomponents 目录的大公司中使用 Polymer 1 和 2 工作了大约一年,我相信 webcomponents 非常有用。我知道像https://adamsilver.io/articles/the-problem-with-web-components/这样的“缺点想法” 。

现在我正在深入研究如何有效地使用 vanilla webcomponents。我刚开始的前提是使用 vanilla web-components 将有助于与 webcomponents 改进保持一致(我无法为这样的想法辩护 - 我现在只是假设这一点)。然后我试图创建一个堆栈来使用 vanilla webcomponents。

在寻找推荐的测试方法时,我访问了https://open-wc.org/testing,我认为它的目的是在不添加特定框架的情况下促进良好实践(来自其网站:“Open Web Components is a community-effort,独立于任何框架或公司”)。这正是我正在寻找的:一种良好的实践和众所周知的推荐,类似于我们对来自 micorservice.io 的微服务(这只是一个类比)。

尝试使用我在 package.json 中得到的脚手架:

  "dependencies": {
    "lit-html": "^1.0.0",
    "lit-element": "^2.0.1"
  }
Run Code Online (Sandbox Code Playgroud)

所以,我的主要问题是:为什么要为 webcomponent 使用 lit-html?

围绕我的主要问题的有用疑问,据我所知,lit-html 是由谷歌和聚合物团队赞助的框架。这不是以某种方式迫使我使用 polifylls 在所有浏览器中运行吗?假设我不关心浏览器不符合 webcomponents,为什么我需要一个框架?

web-component polymer html-templates native-web-component lit-html

0
推荐指数
1
解决办法
320
查看次数

使属性懒惰

我读的最佳做法的文章在这里。我遇到了以下几行:

在加载定义之前,开发人员可能会尝试在元素上设置属性。如果开发人员使用一个框架来处理加载组件、将它们插入到页面中并将它们的属性绑定到模型,则尤其如此。

解决此问题的建议解决方案是:

_upgradeProperty(prop) {
  if (this.hasOwnProperty(prop)) {
    let value = this[prop];
    delete this[prop];
    this[prop] = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试了解会发生这种情况的场景,并尝试了解这段代码如何解决这个问题。我试图找到任何参考资料,但无法找到任何类似的东西。

请有人解释这种情况以及我们在这里试图解决什么问题。

javascript web-component custom-element

0
推荐指数
1
解决办法
173
查看次数

Stencil 组件 - 使用 querySelector() 选择 shadow dom 内的元素

我正在创建一个包装我一直在使用的画布库的组件,以使其在我的一些应用程序之间可移植,并使其功能/样式在应用程序之间保持一致。

问题是,库的一部分要求我将画布元素作为类的参数传递。

是否可以从模板类中选择元素?到目前为止,我设法完成它的唯一方法是关闭 shadow DOM,这有点违背了目的。

web-component stenciljs

0
推荐指数
1
解决办法
1686
查看次数

:host-context 在 Lit-Element Web 组件中没有按预期工作

我有两个 Lit 元素 Web 组件 - 一个是units-list,其中包含许多units-list-item元素。这些units-list-item元素有两种不同的显示模式:紧凑和详细。因为列表元素支持无限滚动(因此可能包含数千个单位),我们需要任何在两种模式之间切换的机制来尽可能提高性能。

这就是为什么我认为一个理想的解决方案是:host-context()units-list-item元素的样式中使用伪选择器,因为这样每个units-list-item元素都可以通过更改应用于祖先的类(这将在阴影内)在两种显示模式之间切换units-list元素的DOM )。

详细说明,这里是units-list元素的相关标记。请注意,“触发器”类正在应用于#list-contentsdiv,它是units-list模板的一部分。

<div id="list-contents" class="${showDetails ? 'detail-view table' : 'compact-view table'}">
    ${units.map(unit => html`<units-list-item .unit="${unit}"></units-list-item>`)}
</div>
Run Code Online (Sandbox Code Playgroud)

如您所见,该showDetails标志控制是将“detail-view”还是“compact-view”类应用于包含所有units-list-item元素的 div 。这些类肯定被正确应用。

这是units-list-item元素的完整渲染方法(删除了不必要的标记):

render() {
    const {unit} = this;
    // the style token below injects the processed stylesheet contents into the template
    return html`
        ${style}
        <div class="row compact">
            <!-- …
Run Code Online (Sandbox Code Playgroud)

javascript css web-component shadow-dom lit-element

0
推荐指数
1
解决办法
701
查看次数

如果之前定义了属性,则 WebComponents 属性设置器不会触发

如果之前定义了属性,则 WebComponents 属性设置器不会触发。如下:

<foo-bar id='ele1'></foo-bar>
<foo-bar id='ele2'></foo-bar>
<script>
  ele1.foo = 'hello';

  class FooBar extends HTMLElement {

    set foo(val) {
      console.log(`set ${this.id} to ${val}`);
      this._foo = val;
    }

    get foo() {
      return this._foo
    }
  }

  customElements.define('foo-bar', FooBar);

  setTimeout(() => {
    ele1.foo = 'world';
    ele2.foo = 'world';

    console.log(`ele1.foo is ${ele1.foo}`);
    console.log(`ele2.foo is ${ele2.foo}`);
  }, 1000);
</script>
Run Code Online (Sandbox Code Playgroud)

控制台输出(set ele1 to world不是输出`):

set ele2 to world
ele1.foo is world
ele2.foo is world
Run Code Online (Sandbox Code Playgroud)

所以我必须Object.defineProperty这样观察属性:

set ele2 to world
ele1.foo is world …
Run Code Online (Sandbox Code Playgroud)

setter properties web-component

0
推荐指数
1
解决办法
199
查看次数

何时调用自定义元素构造函数?(HTMLTemplateElement.content问题)

看看这个简单的例子 (不要理会这个,去编辑)

class MyElement extends HTMLElement {

  customProperty = "something";

  constructor() {
    super();

    console.log("My Element Constructor");
  }
}

customElements.define("my-element", MyElement);

document.body.innerHTML = "<my-element></my-element>";
var myElement = document.querySelector("my-element");
console.log(myElement); // 
console.log(myElement.customProperty); //
Run Code Online (Sandbox Code Playgroud)

输出:

<my-element>
undefined
My Element Constructor
Run Code Online (Sandbox Code Playgroud)

在主调用堆栈完成之前,不会调用自定义元素构造函数(但它是 HTMLElement 构造函数)。这是预期行为还是错误?

谢谢!

编辑

为了简化我的实际情况,我提出了前面的示例,但我现在认为它不适合说明我的问题(该示例确实可以正常工作)。感谢@connexo的回答,我能够隔离问题(这是一个具有许多依赖项的复杂项目)并将其转换为以下示例:

<my-element>
undefined
My Element Constructor
Run Code Online (Sandbox Code Playgroud)

由于某种原因,当模板元素的内容被添加到shadowRoot时,这些元素将不会被解析,直到shadowRoot被添加到DOM。但是当直接修改shadowRoot的innerHTML时,即使shadowRoot不属于DOM,也会解析该内容。

感谢您的时间。

javascript constructor web-component custom-element native-web-component

0
推荐指数
1
解决办法
1427
查看次数