我有一个像这样定义的 Web 组件自定义元素。
<template id="dropdown-template">
<select>
<slot></slot>
</select>
</template>
<script>
class Dropdown extends HTMLElement {
constructor() {
super();
const shadowRoot = this.attachShadow({mode: 'open'});
let template = document.getElementById('dropdown-template');
shadowRoot.appendChild(template.content.cloneNode(true));
}
}
customElements.define("drop-down", Dropdown);
</script>
Run Code Online (Sandbox Code Playgroud)
在尝试使用它时,我尝试将带有值的选项标签传递到自定义元素中。
<drop-down>
<option>one</option>
<option>two</option>
<option>three</option>
</drop-down>
Run Code Online (Sandbox Code Playgroud)
这不起作用。select 元素显示为具有一个<slot>
元素作为其直接子元素,并且它不呈现选项。这不可能与<select>
标签有关吗?
我正在看几个CSS和Javascript文件的Chromes Developer工具中的瀑布.
刷新页面时,正如预期的那样,从浏览器缓存加载了几个文件.大部分时间都需要1ms才能加载.然而,一些文件,每次刷新似乎都是相同的罪犯,需要花费更长的时间.在400毫秒到800毫秒之间.
Chromes网络选项卡中的瀑布时间线显示在某些情况下,此时间花在TTFB(第一个字节的时间)上.这对我没有任何意义,如果从浏览器缓存中获取它应该从硬盘驱动器而不是服务器获取它,为什么有TTFB?
对于其他文件或有时在不同的刷新,我看到时间被归咎于内容下载时间.再次,来自缓存这应该是非常即时的,但我有时会看到它需要超过半秒.
任何人都可以了解这里发生的事情吗?这是我正在处理的网络应用程序,因此我没有可以分享的链接,我很害怕.
假设我的打字稿项目中有一个文件,出于某种原因,我希望它只是普通的 JS(对听到好坏的争论不感兴趣)。
示例 Javascript 文件(名为 foo.js):
export default foo = { prop: 'value' }
Run Code Online (Sandbox Code Playgroud)
同一文件夹中的 Typescript 文件使用上述 Javascript 文件
import foo from "./foo";
Run Code Online (Sandbox Code Playgroud)
当我这样做并尝试运行打字稿编译器时,出现以下错误:
错误 TS7016:找不到模块“./foo”的声明文件。“{fileLocation}/foo.js”隐式具有“any”类型。
我已经阅读了一些有关声明文件的文档。在现实世界的例子中,foo 的对象结构并不简单。由于时间原因,我不想定义它的结构只是为了在我的项目中使用它。
有没有一种简单直接的方法可以将此模块声明为任何类型并继续我的一天?