标签: web-component

HTML <template> 元素与 Javascript 模板文字

Mozilla 表示Web 组件由三种主要技术组成:

  1. 自定义元素
  2. 影子DOM
  3. HTML 模板

根据 ECMAscript 的模板文字,数字 3,“HTML 模板”甚至是必要的吗?

看看我从James Milner那里得到的这个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Web Component</title>
    <script type="text/javascript">
    // We define an ES6 class that extends HTMLElement
    class CounterElement extends HTMLElement{
            constructor() {
                    super();
                    // Initialise the counter value
                    this.counter = 0;

                    // We attach an open shadow root to the custom element
                    const shadowRoot= this.attachShadow({mode: 'open'});

                    // We define some inline styles …
Run Code Online (Sandbox Code Playgroud)

javascript web-component template-literals hyperhtml html-templates

7
推荐指数
1
解决办法
1979
查看次数

Vue cli 3 - 找不到模块“@vue/cli-plugin-babel”

我正在使用带有打字稿支持的 vue cli 3。实际上,我正在尝试使用 vuejs 创建 Web 组件。

主文件

import Vue from 'vue';
import './plugins/vuetify';
import App from './App.vue';
import router from './router';
import store from './store';
import wrap from '@vue/web-component-wrapper';

import RoleManagement from './views/role-management/RoleManagement.vue';

const CustomElement = wrap(Vue, RoleManagement);
window.customElements.define('custom-component', CustomElement);

Vue.config.productionTip = false;

new Vue({
  router,
  store,
  render: (h) => h(App),
}).$mount('#app');
Run Code Online (Sandbox Code Playgroud)

创建web组件的命令如下,

vue-cli-service build --target wc --name custom-component ./src/main.ts

在出现这个错误后,

找不到模块“@vue/cli-plugin-babel”

web-component typescript babeljs vue-cli-3

7
推荐指数
1
解决办法
1万
查看次数

Angular 元素与 Angular 库?

我的团队处理多个角度项目。为了代码重用,我们将许多表示组件提取到库中,然后在我们的各种项目中使用它们。

那么,鉴于我们所有的项目都是基于 angular 的,而且我们已经使用了库,我们还能从 angular 元素中获得什么?

我开始研究元素的原因是:

我们的大部分旧项目都使用 Bootstrap 3。我们希望将 Bootstrap 4 与我们制作的新东西一起使用。所以我想知道一个元素是否可以用 Bootstrap 4 设计,并在用 B-3 设计的地方使用它而不会破坏?

那可能吗 ?

web-component angular angular-library angular-elements

7
推荐指数
1
解决办法
3092
查看次数

如何在另一个 Angular 应用程序中导入 Angular Web 组件

我有一个用 Angular 5.2 构建的应用程序。我还从 Angular 8.0 构建了一个 Web 组件。如果我要将该 Web 组件放在静态 html 中,我会这样做:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Custom Button Test Page</title>
  <!-- This is the Web Component import -->
  <script src="elements.js"></script>
</head>

<body>
<custom-button></custom-button>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

运行这个 index.html 文件将内置 web 组件。但是,如果我将相同的方法应用于 Angular 应用程序(将它包含在我的 Angular 5.2 应用程序中),它不起作用。

如果我尝试直接从主 index.html 导入,则会出现文件未找到错误。如果我从 angular.json 脚本导入它,我会收到意外的令牌错误。

我到底应该如何将 Angular Web 组件导入现有的 Angular 应用程序?

web-component angular

7
推荐指数
1
解决办法
3111
查看次数

在 Shadow DOM 中创建单选按钮

当我们要使用Shadow Dom创建自定义单选按钮作为 Web 组件时,就会出现问题。

通常,当我们使用单选按钮时,我们通常会为分组的单选框赋予相同的名称,如下所示。

<input type="radio" name="size" id="small" value="small">
<input type="radio" name="size" id="large" value="large">
Run Code Online (Sandbox Code Playgroud)

但是如果我们定义一些自定义元素(比如 cus-radio) -> 我们会以一种方式将名称和 ID 作为输入(来自父元素)并将它们放在自定义元素中。这将完全适用于正常情况。

但我的问题是影子 dom!当我们在 shadow dom 内创建元素时,其中的属性是可访问的或与外部 dom(主 dom)连接。那么,如果它的 name 和 id 属性在父 dom 中不可访问或通用,我们如何开发自定义单选按钮?

例子:-

我们将像这样开发我们的自定义元素(像角度元素中的伪代码)

radio.html:-

<input type="radio" [name]="name" [id]="id" ...>
Run Code Online (Sandbox Code Playgroud)

TS/逻辑文件:-

...
component cus-radio {
@Input() name: string;
@Input() id: string;
...
Run Code Online (Sandbox Code Playgroud)

无论我们在哪里使用它:-

<cus-radio [id]="'small'" [name]="'size'" value="small">
<cus-radio [id]="'large'" [name]="'size'" value="large">
Run Code Online (Sandbox Code Playgroud)

预期的行为应该是(就像在正常 dom 中发生的那样),这两个无线电输入必须相互关联并存在于两个相互理解中,就像一个被检查了另一个必须取消检查等。但在 shadow dom 中它没有。因为那些 name 和 id 在没有引用父 dom(主 dom)的 shadow …

javascript web-component shadow-dom custom-element angular-elements

7
推荐指数
1
解决办法
989
查看次数

是否可以使用由不同版本的 Angular 构建的不同角度元素

我想知道是否可以使用不同版本的 Angular 构建的不同角度元素(自定义元素)。我听说 zone.js 正在污染全局范围。

感谢您的回答。

javascript web-component custom-element angular

7
推荐指数
1
解决办法
1405
查看次数

lit-html 的动态标签不可能?

谁能告诉我为什么我不能在 lit-html 的html方法中使用变量?

const h1 = 'h1';
return html`
  <${h1} class="a-heading ${classes}">
    <slot></slot>
  </${h1}>
`;
Run Code Online (Sandbox Code Playgroud)

如果我替换${h1}h1没有问题的作品。

javascript web-component custom-element lit-element lit-html

7
推荐指数
3
解决办法
1981
查看次数

如何在 VS 代码中对 JavaScript 字符串中的 HTML 进行语法高亮显示?

是否有任何 Vs Code 扩展可以在 JavaScript 字符串中突出显示 HTML?

具体来说,我正在编写 Web 组件

const html = content => `
  <div>
    <table>
      ${content}
    </table>
  </div>
`;

class BaseTable extends HTMLElement {
  constructor() {
    super();
  }

  set content(value) {
    const template = document.createElement('template');
    template.innerHTML = style + html(value);

    this.attachShadow({ mode: 'open' });
    this.shadowRoot.appendChild(template.content.cloneNode(true));
  }
}
Run Code Online (Sandbox Code Playgroud)

我想突出显示 html 常量变量中的字符串

html javascript web-component visual-studio-code

7
推荐指数
1
解决办法
4188
查看次数

lit-element 和 React 之间的主要区别

查看 React 代码,它似乎更类似于“Lit-Element”代码,两者都可用于创建 Web 组件。如果有人可以解释“React”和“Lit-element”之间的主要区别,这会很有帮助吗?

web-component reactjs lit-element

7
推荐指数
1
解决办法
3889
查看次数

是否可以以编程方式在 Web 组件中插入元素?

是否可以自动或以编程方式插入特定类型的嵌套 Web 组件或元素,而无需为其指定slot属性?

考虑这样的结构:

<parent-element>
  <child-element>Child 1</child-element>
  <child-element>Child 2</child-element>

  <p>Content</p>
</parent-element>
Run Code Online (Sandbox Code Playgroud)

有了<parent-element>这样的 Shadow DOM:

<div id="child-elements">
  <slot name="child-elements">
    <child-element>Default child</child-element>
  </slot>
</div>
<div id="content">
  <slot></slot>
</div>
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

<parent-element>
  <#shadow-root>
    <div id="child-elements">
      <slot name="child-elements">
        <child-element>Child 1</child-element>
        <child-element>Child 2</child-element>
      </slot>
    </div>
    <div id="content">
      <slot>
        <p>Content</p>
      </slot>
    </div>
</parent-element>
Run Code Online (Sandbox Code Playgroud)

换句话说,我想强制<child-element>s 只允许在<parent-element>类似于<td>元素中只允许在一个<tr>元素中使用。我希望它们被放置在<slot name="child-elements">元素中。必须在slot它们中的每一个上指定一个属性以将它们放置在 的特定插槽中<parent-element>似乎是多余的。同时, 中的其余内容<parent-element>应该自动插入到第二个<slot>元素中。

我首先搜索了一种在注册父元素时定义它的方法,尽管CustomElementRegistry.define()目前仅支持extends作为选项。

然后我想,也许有一个功能允许手动插入元素,即类似的东西childElement.slot('child-elements') …

html web-component shadow-dom custom-element html-templates

7
推荐指数
1
解决办法
1028
查看次数