2016-12-02 5 views
2

これはおそらく私が偶然見つけたバグだと思います。私は、これはコンポーネントの警告Vue.js取得しています:テンプレートとvue.jsを使ったルートノードの奇妙さ

vue.js:2611 [ヴューが警告]:それは複数のノードが含まれている可能性があるため、コンポーネントのルート要素として<template>を使用することはできません:

だから私は(確かにテンプレートノードのそれぞれが1つだけのノードが含まれている)、それは上の窒息だ複数のノードであるように思われ、2つのテンプレートノードを持つ

<template id="tpl-field"> 
    <template v-if="fieldType==='checkbox-inline'"> 
     <label class="checkbox-inline">[SNIP]</label> 
    </template> 
    <template v-else> 
    [SNIP] 
    </template> 
</template> 

:問題は、このように思われます。しかし、これはVueのif-elseです。ノードの1つが存在する場合、他のノードは論理的には存在できません。

ここの問題のデモ:https://jsfiddle.net/jonmor51/Ldz3k0jp/1/。私がdiv内のすべてをラップすると、動作します。しかし、それがなければ、それは失敗する。 (残念なことに、私がこれを使用したいコンテキスト、すなわちBootstrapグリッド内のインラインチェックボックスの場合、divの折り返しが問題を壊します)。

答えて

1

インナーtemplateの直接の子を確認してください、彼らは、単一の要素ですか?その場合は、内部のtemplateを削除し、v-iflabelに移動してください。

またはdivではなく、を使用してください。これにより、インライン要素のスタイルが損なわれません。

+0

あなたは正しいです、それは面白いです。含まれている要素にv-ifとv-elseを移動すると、表面的に同じ状況が存在しても問題はありません(つまり、2つの代替ルート要素、この時点ではテンプレートは除外されます)。だから、問題を引き起こすのはちょうどテンプレートのようです。 https://jsfiddle.net/jonmor51/Ldz3k0jp/3/ –

+0

@JohnMoore「テンプレート」の削除を提案したとき、私は実際にそれを試していませんでした...それで、vueが正しくあるかどうかを知ることができます'v-if'が使用されているときは1つのルート要素です。そして、 'template'はルートとして許可されていません。vueは直進し、最終的にレンダリングされるものを分析せずに警告を出します。 –

1

これがブートストラップの問題を解決するかどうかはわかりませんが、内部テンプレートを<transition>タグで囲み、それぞれにキーを設定することができます。

この作業フィドル

https://jsfiddle.net/AldoRomo88/7c7znu3p/

+0

はい、うまくやっているようです。それは「鍵」もなくしているので、なぜ鍵が必要なのですか?私はそれが少しのkludgeの感触を持っているにもかかわらず、これと一緒に行くかもしれません(それは移行のためではありません)が、少なくとも私を動かす! –

+0

しかし、私は警告が表示されていますが、トランジションはリストでは動作しません。 ;-)私の意見では、vue.jsの開発者は何かをうまく混乱させました。 – Drachenfels

関連する問題