标签: lit-html

lit-html 中 slot 没有子节点时执行某些操作

我想在插槽上没有内容时显示文本。

class List extends LitElement {
  public render() {
    return slot.length === 0 
      ? html`No content is available`
      : html`<slot></slot>`;
  }
}
Run Code Online (Sandbox Code Playgroud)

lit-element lit-html

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

一旦所有子元素都_实际_更新,就运行一个函数

在 lit-html 中,我们有一种firstUpdated()方法可以在渲染元素后运行一次性初始化。

如果您只需要在该模板中的所有子项更新后才运行某个函数,该怎么办?如果您的模板包含本机表单元素和自定义表单元素怎么办?

现在我正在做一件可怕的事情:

  firstUpdated () {
    super.firstUpdated()

    setTimeout(() => this.onceChildrenAreUpdated(), 100)
  }
Run Code Online (Sandbox Code Playgroud)

当然有更好的方法吗?我意识到这很棘手,因为对于 lit-element 来说“渲染”意味着 DOM 已经完成;这并不意味着里面的所有元素都已经完成了接下来想要做的初始化。

但仍然...

polymer lit-element lit-html

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

将 lit / lit-html TemplateResult 渲染为字符串

在lit/lit-html/lit-element中,标准组件是TemplateResult(通常是HTMLTemplateResult),创建如下:

function renderMe(msg) {
    return html`<div>Hello ${msg}!</div>`;
}
Run Code Online (Sandbox Code Playgroud)

当然,该库的强大功能和效率在于,后续调用将重用相同的<div>元素,并且仅替换更改的片段。

然而,为了测试renderMe()上面的函数,能够将返回值视为标准字符串会很有帮助,例如:

assert.equal(RENDER_AS_STRING(renderMe('kimiko')), '<div>Hello kimiko!</div>');
Run Code Online (Sandbox Code Playgroud)

并在测试函数如何呈现到浏览器本身之前修复函数中的任何错误。

RENDER_AS_STRING是否有类似lit 本身或测试库中的函数?我已经搜索过,但没有找到。

lit-html lit

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

有没有办法让 LitHtml 属性可选?

我不是在谈论布尔属性,比如class在没有 CSS 类的情况下不想添加空类属性的属性。

html`<span class=${hasClass ? 'my-class' : ''}></span>`
Run Code Online (Sandbox Code Playgroud)

lit-element lit-html

3
推荐指数
1
解决办法
1298
查看次数

LitElement 未更新列表中的复选框

我有一个简单的检查清单,每个项目都有一个删除按钮。当我检查第一个项目然后删除它时,列表更新,删除该项目,但选中下一个项目的复选框。下一项的属性是正确的。

这是我的代码:

import { LitElement, html } from 'lit-element';

class CheckList extends LitElement {
  static get properties() {
    return {
      items: { type: Array },
    };
  }

  constructor() {
    super();
    this.items = [
      {
        id: 1,
        text: 'Item 1',
        isDone: false,
      },
      {
        id: 2,
        text: 'Item 2',
        isDone: false,
      },
    ];

    this.toggleCheck = this.toggleCheck.bind(this);
    this.deleteItem = this.deleteItem.bind(this);
  }

  render() {
    return html`
      <ul>
        ${this.items.map(item => html`
          <li>
            <input
              type="checkbox"
              value=${item.id}
              ?checked=${item.isDone}
              @click=${this.toggleCheck}
            >
            ${item.text}
            <button @click=${this.deleteItem}>X</button>
          </li>
        `)}
      </ul> …
Run Code Online (Sandbox Code Playgroud)

javascript lit-element lit-html

3
推荐指数
1
解决办法
2060
查看次数

我应该使用属性还是属性来传递数据?

lit-element大多数情况下,通过属性和属性将数据从父组件传递到子组件会导致相同的结果。

我想知道在哪种情况下我应该使用属性,而在哪种情况下使用属性?

polymer lit-element lit-html

3
推荐指数
1
解决办法
1487
查看次数

Lit-Html "object Object" 代码显示在浏览器中

我的浏览器在网页中显示 JavaScript 代码,而不是我的自定义元素的预期输出。网页显示:

[object Object]
Run Code Online (Sandbox Code Playgroud)

自定义元素的代码很简单:

import { LitElement } from 'https://jspm.dev/lit-element@2.3.1';
import { html } from 'https://jspm.dev/lit-html@1.2.1';
export class MyFooter extends LitElement {
  createRenderRoot() {
    return this;
  }
  render(){
    return html`
      foobar
    `;
  }
}
customElements.define('my-footer', MyFooter);
Run Code Online (Sandbox Code Playgroud)

我没有使用 Node、NPM 或任何构建工具,只是从 JSPM CDN 导入 ES6 模块来加载 JavaScript。

javascript web-component lit-element lit-html

3
推荐指数
1
解决办法
454
查看次数

将 Lit 与 Javascript 结合使用,无需构建工具

我正在构建一个桌面应用程序,用于监视某些事物并生成有关其正在监视的内容的数据。当用户想要与数据交互时,应用程序会启动一个非常简单的网络服务器。服务器提供静态页面并具有基本的 http API 来提供数据。我使用 html 作为通用 UI,用户使用浏览器查看数据并与之交互。

我想使用 Google 的 Lit 2 将我的 html/css/js 重写为基于组件的 Web 应用程序。我喜欢纯 Web 组件的想法,但我注意到 Lit 提供了一些很棒的附加功能。毫不奇怪,大多数 Lit 文档都面向具有构建步骤的更传统的 Web 环境。我想看看是否可以让我的服务器尽可能简单并避免传统的后端工具(打字稿编译、缩小等)。我想用一系列简单的 js 文件中的 Lit 组件替换当前的静态 html/css/js。

目前,我的服务器从“公共”目录为我的页面提供服务,并具有最小的 http API:

- public/
 -- js/
 -- css/
 -- index.html
Run Code Online (Sandbox Code Playgroud)

我应该如何在没有构建步骤的系统中使用 Lit?我需要与我自己的继承自 LitElement 的 javascript 类一起提供的最小 Lit 文件集是多少?

web-component lit-element lit-html lit

3
推荐指数
1
解决办法
3384
查看次数

lit-element 将数据从一个组件传递到另一个组件

我目前正在学习如何使用 lit-element v2.0.0-rc.2 我有两个组件 app.js 和 list-items.js。在 app.js 中,我从本地存储中收集数据并将其存储在 this.todoList 中,然后我在我的 list-items.js 中调用 this.todoList 但我遇到的问题是它没有将数据作为数组传递但作为一个对象,我试图在列表项中输出该数据,当我执行 this.todoList 的 console.log 时,我得到的所有数据是 [object] 在我的

  • 标记它用标记的点呈现出来,但没有数据。我想知道是否可以帮助我理解为什么会发生这种情况。这是我的代码 app.js ''' import {LitElement, html} from 'lit-element'; 导入 './add-item'; 导入'./list-items';

    class TodoApp extends LitElement{
    
    static get properties(){
        return{
            todoList: Array
        }
    }
    
    constructor(){
        super();
        let list = JSON.parse(localStorage.getItem('todo-list'));
        this.todoList = list === null ? [] : list;
    
    }
    
    render(){
        return html `
        <h1>Hello todo App</h1> 
        <add-item></add-item>  
        <list-items todoList=${this.todoList}></list-items>     
        `;
        }
    }
    
    customElements.define('todo-app', TodoApp)
    
    list-items.js
    import { LitElement, html …
    Run Code Online (Sandbox Code Playgroud)
  • polymer-3.x lit-element lit-html

    2
    推荐指数
    1
    解决办法
    7115
    查看次数

    Lit-element,如何连接TemplateResult?

    我们有一个显示标题标题的自定义模板元素,我们希望扩展此组件,以便在单击按钮时也显示带有面包屑的标题标题。

    示例代码:

          ... private getTemplateResultFromProperty: TemplateResult[] = []; ...
            
                //This works fine: 
                func1(): TemplateResult {
                return html`  
                      <custom-header-template
                        .data=${data}'>
                    </custom-header-template>` 
            }
    
    
                     //Can't return concatenated header  
                     func2(): TemplateResult {
                    //repeat does not work, this returns empty strings
                        return html`${repeat(this.getTemplateResultFromProperty, t => t)}`;
                
                    } 
    
    Run Code Online (Sandbox Code Playgroud)

    我们只能在func2方法中通过指定数组元素而不使用 html`` 来返回并显示新标头,如下所示:return this.headerTemplateArray[1]但这不是我们想要做的。

    错误消息:Uncaught (in promise) TypeError: Cannot read property 'split' of null at new Template (template.js:87)当我们尝试这样做时:return html`${this.getTemplateResultFromProperty}`;

    在这种方法中, html`` 方法似乎对我们根本不起作用...所以我们怀疑我们使用Repeat() 的方式可能存在问题,或者我们以错误的方式连接/使用 TemplateResult 。

    有任何想法吗?

    插图

    breadcrumbs web-component lit-element lit-html lit

    2
    推荐指数
    1
    解决办法
    1794
    查看次数