25. Events & Methods - daniel-qa/Vue GitHub Wiki
你不想在HTML代码中加入太多的逻辑。
相反, HTML代码实际上应该只是关于输出的东西。
这样的逻辑,即使不是太复杂, 通常也应该包含在 JavaScript 代码中。
- 在 vue 控制的 html 中,你不能使用像下列的 function
function add{
counter = conuter +1;
}
您只能在此Vue控制的HTML部分中使用在Vue应用程序中定义的内容。 像下面
html
<section id="events">
<h2>Events in Action</h2>
<button v-on:click="counter++">Add</button>
<button v-on:click="counter = counter -1">Reduce</button>
<p>Result: {{ counter }}</p>
</section>
app.js
const app = Vue.createApp({
data() {
return {
counter: 0,
};
},
});
app.mount('#events');
现在, 我们不只是像以前那样使用方法来手动调用它们, 我们还可以使用方法将它们连接到事件侦听器,
并在特定事件发生时让Vue为我们调用它们。
例如, 这里我们可以添加一个add方法,
虽然这个名字完全由你决定, 你也可以把它命名为add
counter或increment, 或者你想要的任何名字,
但我会把它命名为add。
在这里, 您可以更新这个计数器, 这一点非常重要,
const app = Vue.createApp({
data() {
return {
counter: 0,
};
},
methods: {
add(){
this.counter = this.counter + 1;
}
}
});
app.mount('#events');
- 完整代碼
button click時,會呼叫 add(),並在點擊時,Result 會顯示 counter 內容的改變
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue Basics</title>
<link href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap"
rel="stylesheet" />
<link rel="stylesheet" href="styles.css" />
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="app.js" defer></script>
</head>
<body>
<header>
<h1>Vue Events</h1>
</header>
<section id="events">
<h2>Events in Action</h2>
<button v-on:click="add()">Add</button>
<button v-on:click="counter = counter -1">Reduce</button>
<p>Result: {{ counter }}</p>
</section>
</body>
</html>
const app = Vue.createApp({
data() {
return {
counter: 0,
};
},
methods: {
add(){
this.counter = this.counter + 1;
}
}
});
app.mount('#events');
除了像这样调用add,
你也可以指向它, 这样你就可以告诉Vue, "这是函数的名字", 或者更准确地说是方法的名字.
<button v-on:click="add">Add</button>
因为它更接近于普通JavaScript以及如何在其中设置事件侦听器,
但值得注意的是, 如您所见, 这两种语法都是允许的
这被认为是更好的, 所以从这种方法和这种模式开始是一个好主意。
这就是我们如何使用方法。
我们不能只在花括号中使用它们,
也不能将它们与绑定一起使用, 以动态地导出我们想要输出的值, 但我们也可以将它们与事件侦听器一起使用, 以定义当事件发生时应该执行的代码。
实际上,
您将更经常地使用方法将它们连接到事件, 而不是使用它们来输出动态派生的内容。
我之前展示的只是向你展示这是可能的, 并介绍一些方法,
但通常,你会像这样将它们与事件侦听器结合使用。
- 加入 reduce()
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue Basics</title>
<link href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap"
rel="stylesheet" />
<link rel="stylesheet" href="styles.css" />
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="app.js" defer></script>
</head>
<body>
<header>
<h1>Vue Events</h1>
</header>
<section id="events">
<h2>Events in Action</h2>
<button v-on:click="add()">Add</button>
<button v-on:click="reduce">Reduce</button>
<p>Result: {{ counter }}</p>
</section>
</body>
</html>
app.js
const app = Vue.createApp({
data() {
return {
counter: 0,
};
},
methods: {
add(){
this.counter = this.counter + 1;
},
reduce() {
this.counter = this.counter - 1;
}
}
});
app.mount('#events');
- 加入參數
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue Basics</title>
<link href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap"
rel="stylesheet" />
<link rel="stylesheet" href="styles.css" />
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="app.js" defer></script>
</head>
<body>
<header>
<h1>Vue Events</h1>
</header>
<section id="events">
<h2>Events in Action</h2>
<button v-on:click="add(10)">Add 10</button>
<button v-on:click="reduce(5)">Reduce 5</button>
<p>Result: {{ counter }}</p>
</section>
</body>
</html>
app.js
const app = Vue.createApp({
data() {
return {
counter: 0,
};
},
methods: {
add(num){
this.counter = this.counter + num;
},
reduce(num) {
this.counter = this.counter - num;
}
}
});
app.mount('#events');