2017-04-19 4 views
2

対ヴュー例えば、私は次のように実装したかった、私は今、いくつかのvue.jsを学んだし、私はどの道を思っていた私があれば行く必要があります。 Before clicking Edit buttonどの練習が良いですか:v-show(真/偽)かreplaceWith? jQueryの

After Edit button was clicked

質問ですHTMLで<span></span>と書くことができます。style="display: none"<textarea></textarea>を追加すると、vue.jsの助けを借りてEditボタンをクリックすると、代わりにspanを表示してtextareaを表示することができ、jQueryのreplaceWithメソッドを追加すると、そこにコードのいくつかの行を保存します。しかし、それが適切な方法であるかどうかは分かりません。

ページがまだ読み込まれている間、テキストエリアを隠すためにv-cloakも使用します。ボタンはこのディレクティブでクリックされたときにtrueisEditingを設定するには、あなたの編集ボタンにイベントハンドラを追加します

data: { 
    isEditing: false 
} 

:あなたがそうのようなコンポーネントのdata属性にブール値を追加しますVue.jsで

答えて

2

0123:それは次の属性を持つように
<a href="#" @click="isEditing = true">...</a> 

は、最後にあなたのスパンに v-showディレクティブを追加します
<span v-show="!isEditing">...</span> 

これにより、編集モードでないときにスパンが表示されるようになります。スパンを非表示にして編集するときにテキストエリアを表示したいので、次のように編集するときは、テキストエリアにv-showを追加する必要があります。このアプローチを使用

<textarea v-show="isEditing">...</textarea> 

私はあなたがいずれかのAJAXや伝統的なPOSTを経由してフォームを送信していると仮定しておりますが、何のjQueryを必要としないので、フォームの入力が常に内になるように、私はこのケースでv-showを使用することをお勧めしますDOM。 v-showは、v-ifのようにDOMから完全に削除するのではなく、条件に基づいて要素にdisplay: noneを単純に適用します。

+1

はい、はい、そうです、私は実際にそれを実装していますが、私の質問はそれを行う適切な方法かどうかです。あなたは、ページを調べている間、両方のhtml要素を見ることができますが、かなり汚れて見えますか?どの練習が良いか知りたいのですが、これはvue.jsを使う方法とjqueryのreplaceWithメソッドを使う方法です。もう一度、私のために、vue.jsを使用すると、コード全体がより明確に見え、親切なものになります。 –

+1

@JakePery 'v-show'の代わりに' v-if'を使うことができます。 'v-if'はDOMをレンダリングしません。 – Bert

+1

@JakePery Vue.jsは、特に大規模なプロジェクトの場合は、2つのうちのメンテナンス性が向上します。これをコンポーネントにリファクタリングすると、コードの再利用も促進されます。ソースを見ると、両方のHTML要素について心配することはありませんが、それがあなたの心配であれば、是非 'v-show'の代わりに' v-if'を使ってください。私の例の 'v-show'の主な動機は、フォーム提出のためにフォーム要素がDOM内に存在する必要がある場合です。 –

2

Vueを使用している場合は、jQueryプラグイン用のラッパーを作成している場合を除き、ほとんどの場合、Vue over jQueryを使用してください。

あなたの問題は、主にv-showがDOMにレンダリングされ、レンダリングされた要素が隠れているようです。 Vueでは、コンテンツを隠すための2つの基本的なオプションがあります。 v-showはDOMにレンダーし、display:noneを使用して非表示にします。 v-ifは単に要素をDOMにレンダリングしません。そうでないときshowSpanがtrueの場合

<span v-if="showSpan">I'm a span!</span> 
<textarea v-else></textarea> 

これは、スパンをレンダリングします、とtextarea

は、だからあなたの場合には、あなたがこのような何かをしたい場合があります。

詳細については、hereのドキュメントを参照してください。

+0

ありがとう、それは私の主な関心事でした。 v-ifがDOMをレンダリングしないことを知らなかった。私は本当にvue.jsの方法を好む、私はそれに固執するでしょう。 –

+0

ああ、ダニエルワゴンに受け入れられた答えを与えなければならなかった、彼は最後のパラグラフでv-ifと言いました。ごめんなさい。しかし、あなたの答えはまだ有用です! –

+0

@JakePery完璧に良い:)私はあなたの主な懸念の一つだと思ったことを明確にしようとしていました。 – Bert

関連する問題