最近在使用Vue的過程中,遇到了一個問題:提示“不是方法”,經(jīng)過一番研究后,總結出了以下幾種情況。
//第一種情況:調用了不存在的方法 const app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }, methods: { sayHello() { console.log('Hello world!') } } }) app.sayHi() // 報錯,sayHi方法不存在 //第二種情況:方法名重復 const app = new Vue({ el: '#app', data: { message: 'Hello Vue!', sayHello() { console.log('Hello world!') } }, methods: { sayHello() { console.log('Hi!') } } }) app.sayHello() // 報錯,sayHello方法重復定義了 //第三種情況:this指向錯誤 const app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }, methods: { sayHello() { console.log(this.message) } } }) const sayHello = app.sayHello sayHello() // 報錯,this指向window而不是Vue實例
解決這些問題的方法也很簡單:
對于第一種情況,可以檢查一下方法是否定義正確、是否寫錯了方法名。
對于第二種情況,可以檢查一下方法名是否重復定義了。
對于第三種情況,可以使用Vue提供的bind方法或者箭頭函數(shù)來修正this指向。
const app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }, methods: { sayHello() { console.log(this.message) } } }) const sayHello = app.sayHello.bind(app) sayHello() // Hello Vue! const app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }, methods: { sayHello: () =>{ console.log(this.message) } } }) app.sayHello() // 報錯,箭頭函數(shù)沒有this,this指向window
如果以上方法都無法解決問題,可以嘗試重啟一下開發(fā)環(huán)境,或者在Vue官方文檔中搜索相關問題。
總結起來,解決Vue提示“不是方法”的問題,最關鍵的是要仔細核對代碼,特別是方法的定義、命名、是否重復等問題,還要注意this指向的問題,可以使用bind方法或者箭頭函數(shù)來修正。