html вводит функцию вызова с параметром

#javascript #typescript #lit-element

#javascript #typescript #lit-элемент

Вопрос:

У меня проблема, когда, если я хочу добавить параметр к своему click атрибуту, он вызывает функцию, как только она отображается

вот мой тестовый html:

 return html`
       <button class="menu-btn" @click="${this._OpenSubMenu(1)}>test</button>" 
`;
  

}

И функция:

 _OpenSubMenu(test:number) {
    console.log("Hello")
  }
  

Это выводится Hello , как только страница отображается.

Итак, как я могу избежать этого, все еще добавляя параметр в свою функцию?

Ответ №1:

Вам нужно заставить вашу функцию возвращать функцию. Затем ваша функция click выполнит возвращенную функцию, и из-за закрытия все равно будет иметь доступ к параметрам.

например..

 _OpenSubMenu(test:number) {
  var that = this;
  return function () {
     console.log("Hello");
     //test is also a closure so you can use here
     //that will equal this
  }
}
  

Если вы хотите получить доступ this , вы также можете использовать функцию со стрелкой

 _OpenSubMenu(test:number) {
  return () => {
     console.log("Hello");
     //test is also a closure so you can use here
     //this will also still be valid here
  }
}
  

Комментарии:

1. спасибо за ответ, однако у этого есть недостаток, я не могу получить доступ к своим свойствам, поскольку они выходят за рамки? (т.е.) this.property = test

2. @MarcRasmussen Да, используйте версию функции со стрелкой, если вы хотите получить доступ this .. Если вы не можете использовать функции со стрелками, создайте замыкание other this , .. Некоторые люди часто делают var that = this это в качестве первой строки.