You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Vue.js中@click事件失效排查:点击按钮无弹窗且数据不更新

问题排查:Vue按钮点击无响应且数据不更新

我帮你梳理下代码里的问题,咱们一步步解决:

1. 按钮不在Vue实例的管辖范围内

你的Vue实例挂载到了#app这个<div>上,但按钮写在了这个div的外面!Vue只能管理它挂载元素内部的DOM和事件,所以外面的按钮点击事件根本没被Vue监听到,自然不会触发rewrite方法。

解决办法很简单,把按钮移到#app div里面就行:

<div id="app">
  <h1 v-once>{{message}}</h1>
  <h2>{{message}}</h2>
  <h5 v-show="viewed" v-html="intro"></h5>
  <!-- 把按钮移到Vue实例管辖的区域内 -->
  <button @click="rewrite" type="button" name="button" >Change</button>
</div>

2. Methods里的语法错误

你的rewrite方法里用逗号分隔语句,最后还多了个冗余逗号,这会导致代码执行异常——即使按钮能触发,弹窗和数据更新也可能失效。咱们改成规范的写法,用分号或者换行分隔语句:

methods: {
  rewrite: function () {
    alert('Button Clicked!');
    this.message = 'Bye vue World!!!';
  },
},

另外补充下v-once的作用:你给<h1>加了v-once指令,这个指令会让元素只渲染一次,之后不管message怎么变化,<h1>里的内容都不会更新;而<h2>没加这个指令,所以修改message后,<h2>会同步显示新内容,这部分是正常的哦。

修正后的完整代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Vue.js Tutorial | Directives</title>
<script src="https://unpkg.com/vue@2.0.3/dist/vue.js"></script>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div id="app">
  <h1 v-once>{{message}}</h1>
  <h2>{{message}}</h2>
  <h5 v-show="viewed" v-html="intro"></h5>
  <button @click="rewrite" type="button" name="button" >Change</button>
</div>
</body>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue World',
intro: 'Welcome to the Tutorial <small>It is all about Vue.js</small>',
viewed: true,
},
methods: {
rewrite: function () {
alert('Button Clicked!');
this.message = 'Bye vue World!!!';
},
},
});
</script>
</html>

现在再点击按钮,就能看到弹窗,而且<h2>里的内容会变成Bye vue World!!!<h1>因为v-once保持原来的内容,这都是符合预期的~

内容的提问来源于stack exchange,提问作者GAURAV PAWAR

火山引擎 最新活动