2017-11-03 14 views
2

アプリケーションに基本的なテキストエディタ機能を追加する必要があります。
私は、ユーザーが何かを入力すると、テキストが段落に出力されるというテキストエリアを持っています。私はスペースバーを聞いて、そのテキストエリアにキーを押してメソッドをトリガーします。
私が入力したキーがテキストエリアに押されたが、私はVue.jsでEnterキーを押すと、タグがテキスト出力に追加されます

this.textBody.appendChildを取得しているときにテキスト出力も改行を持つようにしたい。これは私がしようとしているものです機能

ではありません。

new Vue({ 
    el: "#app", 
    data: { 
   title: "", 
   textBody: "" 
    }, 
    methods: { 
    logSpacebar: function(){ 
     console.log("spacebar pressed"); 
     //Fire corrector API? 
    }, 
    logEnter: function(){ 
     console.log("pressed enter"); 
     var breakTag = document.createElement("br"); 
     this.textBody.appendChild(breakTag); 
    } 
    } 
}) 

対応するHTML(部分的に):

<input type="text" v-model="title"/> 
<textarea name="" cols="30" rows="10" v-model="textBody" v-on:keyup.space="logSpacebar" v-on:keyup.enter="logEnter"></textarea> 
<h2>Title: {{title}}</h2> 
<p>Text body: {{textBody}}</p> 
+1

'refs'属性に見て、それはあなたが必要なものを与える必要があります。 [これは良いスタートになるかもしれません](https://codingexplained.com/coding/front-end/vue-js/accessing-dom-refs) - 適切な答えを書き留めるには多忙です。 – Thebluefish

+0

[OK]を私は
のすべてのタグが最後に(私の悪い)追加されたとして期待された結果を得ることはできませんが、それは動作します。私はappendChildを使うためにDOM要素を取得する必要があったと思います。 – Sergi

答えて

2

Vueの中で自分でDOMを手動で更新することは避けたいと思います。代わりに、v-htmlと組み合わせた計算されたプロパティを使用します。

console.clear() 
 

 
new Vue({ 
 
    el: "#app", 
 
    data:{ 
 
    textBody: "type some text\nwith returns interspersed\nin this textarea" 
 
    }, 
 
    computed:{ 
 
    parsedBody(){ 
 
     return this.textBody.replace(/\n/g,"<br>") 
 
    } 
 
    } 
 
})
<script src="https://unpkg.com/[email protected]"></script> 
 
<div id="app"> 
 
    <textarea v-model="textBody" cols="80" rows="10"></textarea> 
 
    <hr> 
 
    <p v-html="parsedBody"></p> 
 
</div>

関連する問題