微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

属性值更改后,lit-element 不会更改视图

如何解决属性值更改后,lit-element 不会更改视图

为简洁起见删除了一些代码...

基本简单元素

@customElement("simple-el")
export class SimpleEl extends LitElement {
  @property() user = "joe";

  render() {
    return html`<p>Hello,${this.user}!</p>`;
  }
}

调用元素

import "./scratch.ts";

@customElement("doos-main")
export class Doos extends LitElement {
 
  @property() selName = "JOHN";


  constructor() {
    super();

  }

  render() {
    return html`<link rel="stylesheet" href="../css/bulma.min.css" />
      <doos-nav token="${this.token}"></doos-nav>
      <simple-el user="${this.selName}"></simple-el>

      //this displays a button and calls _buttonClick correctly
      ${this.renderView(this.view)} 

      <doos-footer name="FOOTER"></doos-footer>`;
  }


  _buttonClick(e: Event) {
    console.log(e);
    this.selName = "CHANGED!";
  }

}

当我单击按钮时,我更改了 selName属性值,我的想法是 SimpleElement.user 绑定到 selName。因此更改 selName 应该将视图显示Hello CHANGED!!

然而这是行不通的。不过我得到了原始集:Hello JOHN!

我也试过调用 async/await this.requestUpdate();

我的想法和/或实施是否错误

编辑: 我可能应该补充一点,我正在使用 deno 的捆绑命令来构建我的 JS。

deno bundle --unstable --watch -c ./tsconfig.json ./mod.ts ./mod.js

这里是 tsconfig

{
  "compilerOptions": {
    "lib": ["dom","deno.ns"]
  }
}

解决方法

省略了一些重要信息。 _buttonClick 设置的调用情况如何。这很可能没有绑定到类对象。 javascript 中的 this 可以重新分配,并且来自其他语言可能有点出乎意料。

class Person {
  phrase = "Hello There!"

  speak(){
    console.log(this.phrase)
  }
}

const person = new Person();

person.speak(); // This returns "Hello There!"

const speak = person.speak;

speak(); // this gives you `Uncaught TypeError: Cannot read property 'phrase' of undefined`

这可以通过几种方式解决。

  • 确保使用箭头语法 (e) => _buttonClick(e)
  • 设置的事件回调
  • 使用 bind 确保 this 指向类 _buttonClick.bind(this)
class Person2 {
  phrase = "Hello There!";

  constructor(){
    this.speak = this.speak.bind(this)
  }

  speak(){
    console.log(this.phrase)
  }
}

const person2 = new Person2();

const speak2 = person2.speak;

speak(); // This returns "Hello There!"
,

属性与属性不同,如果您将那些点亮的属性设置为 true,则它们只会双向反射。这可能就是为什么更改 selName 并没有让您使用更新的 user 属性重新渲染 simple-el,因为您只更改了它的属性部分。

<simple-el user="${this.selName}"></simple-el>

应该使用 lit 属性绑定

<simple-el .user="${this.selName}"></simple-el>

https://lit-element.polymer-project.org/guide/templates#bind-properties-to-templated-elements

,

它对我有用。见here

这可能无法正常工作。

//this displays a button and calls _buttonClick correctly
  ${this.renderView(this.view)} 

或者问题可能与

deno bundle --unstable --watch -c ./tsconfig.json ./mod.ts ./mod.js

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?