var app = Vue.createApp({
data() {
return {
title: 'This is my TITLE'
}
},
template: `
<h1>{{ title }}</h1>
<button @click="changeTitle">CHANGE TITLE</button>
`,
methods: {
changeTitle() {
this.title = 'This is your TITLE'
}
}
});
const vm = app.mount('#app');
@click="changeTitle('This is your TITLE')"
onclick = "() => changeTitle('This is your TITLE')"
onClick={ () => changeTitle('This is your TITLE') }
onClick={ changeTitle.bind(this, 'his is your TITLE')}
而不是 methods 上,而且也没抛出 methods 属性到 vm 实例上
var app = Vue.createApp({
data() {
return {
title: 'This is my TITLE'
}
},
template: `
<h1>{{ title }}</h1>
<button @click="changeTitle('This is your TITLE')">CHANGE TITLE</button>
`,
methods: {
changeTitle(title) {
this.title = title;
}
}
});
const vm = app.mount('#app');
console.log(vm);
console.log(vm); // undefined
第一种写法:
组件共用一个debounce,每个实例都共用它,不太好
第二种写法(推荐):
每次创建的时候都返回一个新的debounce函数
var Vue = (function() {
function Vue(options) {
this.$data = options.data();
this._methods = options.methods;
this._init(this);
}
Vue.prototype._init = function(vm) {
initData(vm);
initMethods(vm);
}
function initData(vm) {
for (var key in vm.$data) {
(function(k) {
Object.defineProperty(vm, k, {
get: function() {
return vm.$data[k];
},
set: function(newVal) {
vm.$data[k] = newVal;
}
});
})(key);
}
}
function initMethods(vm) {
for (var key in vm._methods) {
vm[key] = vm._methods[key];
}
}
return Vue;
})();
var vm = new Vue({
data() {
return {
a: 1,
b: 2
}
},
methods: {
increaseA(num) {
this.a += num;
},
increaseB(num) {
this.b += num;
},
getTotal() {
console.log(this.a + this.b);
}
}
});
vm.increaseA(1);
vm.increaseA(1);
vm.increaseA(1);
vm.increaseA(1); // 5
vm.increaseB(2);
vm.increaseB(2);
vm.increaseB(2);
vm.increaseB(2); // 10
vm.getTotal(); // 15