【问题标题】:value doesn't get updated in the template string模板字符串中的值未更新
【发布时间】:2017-12-10 18:18:35
【问题描述】:

你好, 我将 fName、lName 和 position 设置为空字符串,我希望在单击按钮后更改它们的值并将该值保存到 this.templates ${this.fName} 等。

showMessage 方法应该接收点击并更新值并注入模板。除了更新值之外,一切都很好。当它到达“mP.innerHTML = _this.template;”时行的值是空的,就像在开始时设置的一样。

奇怪的是 console.log(_this.fName) 在 "mP.innerHTML = _this.template;" 之前运行点击时给出正确的值。

可能是什么问题?我该如何解决?

class Message {
  constructor() {
    this.fName = '';
    this.lName = '';
    this.position = '';

    this.bride = {
      fName: 'Anna',
      lName: 'Doe',
      position: 'bride'
    };

    this.groom = {
      fName: 'John',
      lName: 'Doe',
      position: 'groom'
    };

    this.template = /*html*/`
    <div class="message message-show">
        <div class="message-close">x</div>
        <h1>
          My name is ${this.fName} ${this.lName}, ${this.position}
        </h1>
    </div>`;

    this.elements = function() {
      let messageButtons  = document.querySelectorAll('.wed-couple-newlyweds-message');
      let messagePopup    = document.querySelector('.message-popup');
      let messageClose    = document.querySelector('.message-close');
      let messageDiv      = document.querySelector('.message');
      return {
        messageButtons: messageButtons,
        messagePopup: messagePopup,
        messageClose: messageClose,
        messageDiv: messageDiv
      };
    };


    //Initiate Methods

    //End of Methods.
  }

  //declare methods
  // 1. show message on click.
  showMessage() {
    var _this = this;
    let els = new this.elements();
    let mB = els.messageButtons;
    let mP = els.messagePopup;
    let mD = els.messageDiv;
    mB.forEach(function(message) {
      message.onclick = function() {
      if (message.classList.contains(`wed-couple-newlyweds-message-bride`)) {
        console.log('bride')
        _this.fName = _this.bride.fName
        _this.lName = _this.bride.lName
        _this.position = _this.bride.position
        console.log(_this.fName)
        mP.innerHTML = _this.template;
      } else {
        console.log('groom')
        _this.fName = _this.groom.fName
        _this.lName = _this.groom.lName
        _this.position = _this.groom.position
        console.log(_this.fName)
        mP.innerHTML = _this.template;

      }
      let mC = els.messageClose;
      _this.closeMessage();
    }
  });
};

【问题讨论】:

    标签: javascript ecmascript-6 template-strings


    【解决方案1】:

    类似的模板字面量

    var foo = `Hello, ${name}`;
    

    相当于:

    var foo = "Hello, " + name;
    

    它在解释时获取变量的值并生成一个常规字符串。

    它不会创建任何类型的字符串对象,该对象通过观察被插值的变量的值来动态更新其值。


    如果你想得到一个新的字符串,使用变量的新值,那么你需要重新运行代码。

    把它变成一个函数。

    【讨论】:

    • 如果您能提供一个如何将 var 返回的输出更改为字符串的示例,此响应会更有帮助。目前,当我将模板字符串更改为函数返回值时,它会引发错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2021-03-18
    • 1970-01-01
    • 2014-07-02
    • 2019-11-20
    • 2022-01-03
    • 2022-01-10
    相关资源
    最近更新 更多