将 Vue.JS 道具发送到 JavaScript 函数时出现问题

Posted

技术标签:

【中文标题】将 Vue.JS 道具发送到 JavaScript 函数时出现问题【英文标题】:Problems sending a Vue.JS prop to a JavaScript function 【发布时间】:2021-11-01 17:00:03 【问题描述】:

我正在开发一个使用 Vue.JS 的项目。我有一个组件,其中包括一个按钮、文本和一个允许我在其中插入更多组件的插槽。这个组件获得了一些道具。

当我使用 onclick 按下按钮时,我想向 javascript 函数发送一个道具(一个 ID)。发生这种情况时,具有该 id 的 div 将隐藏或显示(使用 JQuery 的 toggle() 函数)。如果我在代码中指定了 id,就会发生这种情况,但如果我使用具有相同值的 prop 值,它就不起作用。这是我使用的代码:

这些是道具:

props: 'obraName': String, 'idValue': String,

这是按钮所在组件的模板,通过 onclick,我执行 JavaScript 的函数,将 prop 作为参数发送:

<div :style="style">
      <label :style="text">obraName</label>
      <!-- If I change this.idValue with a number, it works -->
      <button onclick='toggleListShow(this.idValue)'>x</button> 
      <div :style="text"><slot></slot></div>
</div>

这是 JavaScript 函数,使用 JQuery:

function toggleListShow(id) 
    $('#obra' + id + " div").toggle()

最后,我使用 php 回显声明组件。我将其他组件放入插槽中,然后将其关闭。这里我声明了 id(将是 obra + id 的 obra)和 prop id-value(这只是 obra 的 id):

echo "<obra obra-name=".$obra['name']." id=".'obra'.$obra['id']." id-value=".$obra['id'].">";

我花了几个小时试图解决这个问题,如果您能帮助我找到不允许我将 idValue 道具(在 PHP 中称为 id-value)发送给我的错误,我将非常感激JavaScript 函数。

谢谢!

【问题讨论】:

我也是 vuejs 的新手。所以我不确定解决方案。但试试这样 嘿!谢谢你这么快回答。这应该是个好主意,但现在,当我尝试时,我收到了这个:TypeError: toggleListShow is not a function. (In 'toggleListShow(idValue)', 'toggleListShow' is undefined)。函数 toggleListShow(id) 在 JavaScript 文件中声明。 toggleListShow 函数是否在 vue 方法中? 不,不是。函数 toogleListShow() 位于名为 app.js 的 JavaScript 文件中。组件在名为 components.js 的 JavaScript 文件中声明。 我建议您在toggleListShow 中打印一些信息,以确保您确实获得了id$('#obra' + id + " div") 确实存在并且正是您想要切换的元素。所以,在toggleListShow 中尝试console.log(id, $('#obra' + id + " div").length, $('#obra' + id + " div").html()); 【参考方案1】:
<div :style="style">
  <label :style="text">obraName</label>
  <button @click="toggleListShow(idValue)">x</button> 
  <div :style="text"><slot></slot></div>
</div>

当你在模板部分时,你不需要使用“this”。

【讨论】:

好的,谢谢! 这并没有解决我的问题,我在 cmets 上解释了原因。 ^^

以上是关于将 Vue.JS 道具发送到 JavaScript 函数时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Vue.js 中将对象作为道具发送并获取 TypeError 和 Warning

如何正确地将数据从 vue 组件发布到 laravel 控制器

如何根据javascript中的系统范围主题将道具发送到变量?

使用 Vue JS 从不同的路由发送 props 到同一个组件

如何在 vue js 中发送带有道具的方法?我在组件中有 2 种方法,但其中一种方法不起作用?

计算道具不工作 Vue JS 2