vuejs 计算属性和模板调试有什么好办法吗?

Is there any good way to debug vuejs computed properties and templates?

我在vuejs调试中遇到一些问题,比如调试计算属性,或者模板中的数据值等...

现在我用的是https://vuedose.tips/tips/debugging-templates-in-vue-js/中提到的IIFE方法调试 :

<h2 dir="auto">
  {{(function(){debugger;let temp = headerMessage})()  ||  headerMessage}}
</h2>

我遇到的一个大问题是 chrome 中用于在 vue 文件中调试的源映射,如下图所示,一个文件中有太多不同代码的重复项(这个 panel.vue下面显示的不是我项目中的那个,它可能是渲染版本或其他东西,我不想看到,我只想看到真正的 panel.vue 文件以更好地工作在上面):

如何解决这个问题,有什么方法可以在 vuejs 中正确调试这些部分,比如使用设置断点?

我建议你使用vue-dev-tools。一个浏览器扩展,允许您逐个检查组件 datacomputed 等等。

您可以从每个浏览器扩展商店下载并安装它:Chrome, Mozilla,等等

Vue Dev Tool 存储库。

对我来说,这对我有很大帮助,在你的计算添加中:

try { ... } catch(e) { console.log(e); }.

也尝试移动您的 return 语句来包围问题并将可疑代码放在 try 块中。

除了@Toodoo 所说的之外,要使 Computed 属性 出现在包含数据和变量的部分中,您的 Computed 必须出现在导出属性列表中,即“return" 在设置结束时。

return {Component1, data, ComputedProp }

然后它将显示为 Computed

换句话说,您 expose/export 让应用程序看到什么,您就对开发工具做什么(这是重要的细节)。

对于调试模板问题,我通常建议将任何复杂的逻辑移动到一个方法中。从那里可以很容易地使用典型工具进行调试。

Vue 计算的问题通常分为三个阵营之一:

1.您正在调试 computed

中的一些复杂逻辑

在这种情况下,尝试将复杂性移出到一个方法中,然后从计算的方法中调用它。然后您可以使用 debuggerconsole.log 和断点,随您喜欢。

但是,当您执行此操作时,您需要确保您依赖于反应性的任何 data/props 都保留在计算定义中,这样您就不会破坏反应性。在这种方法中,计算变得更多地是为正在做繁重工作的 method/methods 收集参数。

2。您的逻辑相当简单,但未按预期执行

对于这些情况,我通常会弹出 Vue devtools,select 计算所属的组件,然后使用 $vm 检查组件的状态和 运行 中间片段计算的逻辑,直到我找到问题。

您可以直接在 $vm 上访问任何 data/props/计算,例如 $vm.myProp

请注意,您必须 select devtools 中的一个组件才能设置 $vm

3。计算取决于反应性但不会改变

这里我的做法通常和#2一样。

你所依赖的反应元件的名称是否有错别字?如果某些东西总是评估为 false,那可能是因为拼写错误指的是不存在的 属性 并返回 undefined(falsy)。

此外,如果您依赖于数据嵌套状态的更改或道具,请确保您使用的是适当的 Vue.set / this.$set