2016-09-04 12 views
4

背景:1.0から2.0に移行しています。

現在、ネストされたコンポーネントを使用しています。親と子の関係は完璧です。ただし、親コンポーネントとメインのVue()インスタンスの関係が壊れています。 Vue()インスタンス内の計算されたプロパティcssstyleは、私が予想していたように$ emit()/ $ on()に基づいて更新されません。

関連セクション:HTMLにおける親コンポーネントの

使用法:主ヴュー()インスタンス

computed: { 
    cssstyle: function() { 
     console.log('cssstyle computed'); 
     bus.$on('padding_changed', function (padding_style) { 
      return padding_style; 
     }); 
     return 'padding: 0px;'; 
    }, 
    ... 

<f9-padding v-if="editable" ></f9-padding>

親コンポーネント内

computed: { 
    cssstyle: function() { 
     var padding_style = this.padding(); 
     bus.$emit('padding_changed', padding_style); 
     return padding_style; 
    } 
} 

親内部の計算されたプロパティは正常に更新されます。しかし、メインのVue()インスタンス内の計算されたプロパティは、ページのロード時にのみ実行されます。 <input>要素を使用していない親からデータを出力する方法を理解できません。私がサイトで見つけたほとんどの例は、<input>の場合のみに焦点を当てています。私はちょうどプロパティデータを変更して計算しました。私はここに表示されたメソッド:http://rc.vuejs.org/guide/components.html#Custom-Eventsを使用しようとしましたが、このドキュメントについて懸念しているのは、親コンポーネントとメインのVue()インスタンスではなく、コンポーネント間のイベントリスニングです。

アップデート:私はこれまで親に計算されたプロパティを変更することで、この問題を解決することができた:

computed: { 
    cssstyle: function() { 
     var padding_style = this.padding(); 
     this.$root.cssstyle = padding_style; 
     return padding_style; 
    } 
} 

とルートヴュー()インスタンスのデータに計算されたからcssstyleを動かします。

data: { 
    cssstyle: 'padding: 0px;', 
}, 

はしかし、私が使用するための少し汚い感じ:

this.$root.cssstyle

は、そこには他に方法はありませんか?

+0

最初の方法が有効です。 – gurghet

+0

ルートVueインスタンスの計算されたcssstyleは、padding_changedイベントによってトリガされません。 –

答えて

5

イベントの発信と受信については、2.0 docsでこれを確認してください。

あなたcustom-componentからthisを発する場合:

:あなたは、このコンポーネントのインスタンスを作るどこ

cssstyle: function() { 
    /*...*/ 
    this.$emit('onsomething', params) 
} 

次に、あなたがあなたのJSで次にこの

<tamplate> 
    <custom-component @onsomething="action"></custom-component> 
</tamplate> 

ような何かを行います

methods: { 
    action: function (params) { 
    console.log('On something') 
    } 
} 
関連する問題