首页 > 其他分享 >astro中创建web components

astro中创建web components

时间:2024-08-07 22:16:45浏览次数:12  
标签:count web components .. MyCounter astro shadowRoot

MyCounter.astro:

<script>
const template = `
  <style>
    * {
      font-size: 200%;
    }

    span {
      width: 4rem;
      display: inline-block;
      text-align: center;
    }

    button {
      width: 4rem;
      height: 4rem;
      border: none;
      border-radius: 10px;
      background-color: seagreen;
      color: white;
    }
  </style>

  <button id="dec">-</button>
  <span id="count"></span>
  <button id="inc">+</button>
`;

class MyCounter extends HTMLElement {
  count: number = 0;
  shadowRoot: ShadowRoot | null = null;

  constructor() {
    super();

    const elem = document.createElement("template");
    elem.innerHTML = template;

    this.shadowRoot = this.attachShadow({ mode: "open" });
    this.shadowRoot.appendChild(
      elem.content.cloneNode(true)
    );
  }

  connectedCallback() {
    this.shadowRoot!.getElementById("inc")!.onclick = () => this.inc();
    this.shadowRoot!.getElementById("dec")!.onclick = () => this.dec();
    this.update(this.count);
  }

  inc() {
    this.update(++this.count);
  }

  dec() {
    this.update(--this.count);
  }

  update(count: number) {
    this.shadowRoot!.getElementById("count")!.innerHTML = count.toString();
  }
}

customElements.define("my-counter", MyCounter);
</script>

test.mdx:

---
title: Welcome to Starlight
description: Get started building your docs site with Starlight.
template: splash
---

# Welcome

import "../../components/MyCounter.astro";

<my-counter />

注意,只能采用这种形式渲染:

import "../../components/MyCounter.astro";
<my-counter />

而不能采用:

import MyCounter from "../../components/MyCounter.astro";
<MyCounter />

否则,控件不显示任何内容!!!

通过浏览器调试器可以看到所有html元素都放在一个shadow-root之下。

标签:count,web,components,..,MyCounter,astro,shadowRoot
From: https://www.cnblogs.com/soarowl/p/18347970

相关文章

  • 《白帽子讲Web安全》 读书
    前段时间看《码农翻身2》时,里面讲到一部分安全相关的知识点很是有趣,又想起多年前一位朋友推荐的《白帽子讲Web安全》,据说这本书是安全领域的圣经,遂跑到图书馆借了这本书,下定决心读一读。这本书前前后后翻了一周的时间,虽然本身我不是从事安全方向的研发,但觉得有一部分知识还是......
  • astro中创建web components
    先创建AstroHeart.astro:<script>//DefinethebehaviourforournewtypeofHTMLelement.classAstroHeartextendsHTMLElement{constructor(){super();letcount=0;constheartButton=this.quer......
  • web页面中直接调用c++/c/go代码?【wasm】
    背景最近在做rosbag的可视化工具,网上找了个源码参考(foxglove)。成功down下来,跑起来了。于是乎,开始研究前后端代码;结果居然花了一下午没找到后端代码,不明白为什么纯web页面就可以解析rosbag(以前都是用node.js或者c++代码解析的)。过程在找了一下午之后,又回到了老办法;看netork,果然......
  • 使用Streamlit构建一个web模拟HTTP请求工具
    目录前言HTTP工具功能点:1.导入库: 2.设置页面配置:3.Markdown格式的说明文本:4.用户输入界面:5.发送请求按钮和逻辑:6.发送HTTP请求并计算请求细节:7.总结 前言    最初就是因为在微信看到一篇文章中,看到此http工具的制作因为觉得Streamlit有无限......
  • node.js: mysql sequelize in WebStorm 2023.1
    mysql:select*fromtutorials;#CREATETABLEIFNOTEXISTS`tutorials`(`id`INTEGERNOTNULLauto_increment,`title`VARCHAR(255),`description`VARCHAR(255),`published`TINYINT(1),`createdAt`DATETIMENOTNULL,`updatedAt`DATETIMENOTNULL,PRIMA......
  • 【QT】Qt中Websocket的使用
    一、WebSocket的定义        WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC6455,并由RFC7936补充规范。WebSocketAPI也被W3C定为标准。                WebSocket使得客户端和服务器之间的数据......
  • 搭建 Web 群集Haproxy
    案例概述        Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS和Nginx。相比较而言,LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有Haproxy好。Haproxy官方网站是http://ww......
  • GitHub爆赞的Web安全防护指南,网络安全零基础入门必备教程!
    web安全现在占据了企业信息安全的很大一部分比重,每个企业都有对外发布的很多业务系统,如何保障web业务安全也是一项信息安全的重要内容。然而Web安全是一个实践性很强的领域,需要通过大量的练习来建立对漏洞的直观认识,并积累解决问题的经验。Web安全与防护技术是当前安全界关......
  • 腾讯云AI代码助手评测:如何智能高效完成Go语言Web项目开发
    腾讯云AI代码助手评测:如何智能高效完成Go语言Web项目开发......
  • web渗透—SSRF
    一:SSRF介绍是一种由web服务器发出请求的漏洞;它能够请求到与它相连的内网资源;通过外网服务器当作跳板请求内网资源!二:SSRF常用函数(1)file_get_contents函数//可以读取本地文件;也可以通过url读取相关远程文件<?php $data=file_get_contents('url'); echo$data;?>(2)cur......