2016-10-05 14 views
11

vueで単純なアプリケーションを作成しようとしていますが、エラーが発生しています。私onScroll機能が期待通りに動作しますが、私は「のsayHello」がインスタンスで定義されていないが、 は、レンダリング時に参照され、私のボタンコンポーネントインスタンスではvueが定義されていませんが、レンダリング中に参照されます

プロパティまたはメソッドをクリックしたときに、私のsayHello関数はエラーを返します。データオプションに無効なデータ プロパティを宣言してください。 (コンポーネントで見つかった)

Vue.component('test-item', { 
    template: '<div><button v-on:click="sayHello()">Hello</button></div>' 
}); 

var app = new Vue({ 
    el: '#app', 
    data: { 
     header: { 
      brightness: 100 
     } 
    }, 
    methods: { 
     sayHello: function() { 
      console.log('Hello'); 
     }, 
     onScroll: function() { 
      this.header.brightness = (100 - this.$el.scrollTop/8); 
     } 
    } 
}); 

答えは本当に明白ですが、私が探して試してみた、何が出ていないような気がします。どんな助けもありがとう。

ありがとうございました。

+2

'sayHello'は' test-item'のメソッドではありません。これは 'app'のメソッドです。 – ceejayoz

+0

ありがとう@ceejayoz、それはそれをしました。 私はここでそれを読んだ:https://vuejs.org/guide/components.html各コンポーネントは、独自の隔離されたスコープに含まれています。 私のコンポーネントは、私がルートVueインスタンスに与えるメソッドを継承しませんか? –

+0

Gotcha。 非常に興味深い、もう一度ありがとう。私はあなたの答えを正しいものとしてマークします、歓声。 –

答えて

8

しかし、いくつかの特定の状況(主にprops)では、各成分はお互いに完全に分離されています。データ、変数、関数などを分離する。これにはメソッドも含まれる。

したがって、test-itemにはsayHelloメソッドがありません。

2

あなたはVueのインスタンスではなく、el属性.mount('#app')を使用して警告を取り除くことができます。

以下のスニペットを確認してください。

var app = new Vue({ 
    data: { 
     header: { 
      brightness: 100 
     } 
    }, 
    methods: { 
     sayHello: function() { 
      console.log('Hello'); 
     }, 
     onScroll: function() { 
      this.header.brightness = (100 - this.$el.scrollTop/8); 
     } 
    } 
}).mount('#app'); 

ますのでご注意ください。次のことは必要ではないかもしれませんが、同じ問題を解決しようとする途中でそれをしました:Laravel Elixir Vue 2プロジェクト。

関連する問題