解决控制台报错:Property or method “showInfo“ is not defined on the instance but referenced during render

快来打我* 2023-09-26 10:34 249阅读 0赞

前言

今天写一个vue的单击事件,发现报错了

源代码如下

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>初始vue</title>
  6. <!-- 引入vue.js -->
  7. <script type="text/javascript" src="../js/vue.js"></script>
  8. </head>
  9. <body>
  10. <div id="root">
  11. <h2>欢迎学习:{
  12. {
  13. name}}</h2>
  14. <button v-on:click="showInfo">点我提示信息</button>
  15. </div>
  16. <!-- 数据代理:通过一个对象代理另一个对象中属性的操作(读/写) -->
  17. <script type="text/javascript">
  18. function showInfo(){
  19. alert("你好!")
  20. }
  21. Vue.config.productionTip = false
  22. const vm=new Vue({
  23. el:'#root',
  24. data:{
  25. name:'vue'
  26. }
  27. })
  28. </script>
  29. </body>
  30. </html>

在这里插入图片描述
报错信息如下
在这里插入图片描述

解决问题

分析问题发现,是由于我的单击回调函数写的不对,我是用的js方式写的这个函数,但是在vue中读取不到这个函数,所以才会报错!

需要使用vue的一个属性:methods
把回调函数写在里面,才能读取到函数,传统js写法是不行的!

我们修改代码,把函数放到methods里面,需要去掉function,只需要保留函数名称以及基本格式

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>初始vue</title>
  6. <!-- 引入vue.js -->
  7. <script type="text/javascript" src="../js/vue.js"></script>
  8. </head>
  9. <body>
  10. <div id="root">
  11. <h2>欢迎学习:{
  12. {
  13. name}}</h2>
  14. <button v-on:click="showInfo">点我提示信息</button>
  15. </div>
  16. <!-- 数据代理:通过一个对象代理另一个对象中属性的操作(读/写) -->
  17. <script type="text/javascript">
  18. function showInfo(){
  19. alert("你好!")
  20. }
  21. Vue.config.productionTip = false
  22. const vm=new Vue({
  23. el:'#root',
  24. data:{
  25. name:'vue'
  26. },
  27. methods:{
  28. showInfo(){
  29. alert("你好!")
  30. }
  31. }
  32. })
  33. </script>
  34. </body>
  35. </html>

在这里插入图片描述

再次点击按钮测试,发现已经解决问题
在这里插入图片描述

总结

在编写vue代码时,我们需要遵循vue的写法,不能一位的使用js代码去实现vue的功能

其他回调函数也是一样的写法,都要写在vue的属性methods里面,让vue可以读取到这个回调函数

发表评论

表情:
评论列表 (有 0 条评论,249人围观)

还没有评论,来说两句吧...

相关阅读