2016-11-17 4 views
1

私は入力ごとにクラスを個別に有効にしたいと思います。私は2つの入力が同じvモデルとクラスにバインドされています。私は、何かが真であるかどうかをチェックするメソッドを持っています。真であれば、バインドされたクラスを有効にします。現在、すべての入力に対してクラスを有効にしています。 (最終的な目標は、アレイ内の要素のための複数の入力を検索することであり、それは一致した場合、クラスにのみ、その要素のためにアクティブに)これについて配列内の個々の要素のクラスをどのようにアクティブにしますか? [Vue.js]

<input v-model="highlightTest" id="1" v-bind:class="{ active: active }" v-on:keyup="Highlighting"></input> 

<input v-model="highlightTest" id="2" v-bind:class="{ active: active }" v-on:keyup="Highlighting"></input> 

Highlighting: function() { 
    if (this.highlightTest != '') { 
    this.active = true; 
} 
else { 
this.active = false; 
} 
+0

私は非常にあなたがやろうとしているものを理解していないが、あなたは一つの入力のためのクラス、個別にアクティブにできることは決してないだろうすべての入力が同じクラスと同じモデルにバインドされている場合あなたは何を達成しようとしているのかをよく説明できますか? –

+0

フィードバックAntonioに感謝します。過去のjQueryを使って、より良いアイデアを得るためにできることの例を示すことができます。 目的は、ユーザーからの入力に単語のリストを生成させることです。 単語のリストがリストに入れられます。 そのリストの単語が入力領域に入力されると、それは個別に強調表示されます。 私は現在vueでこれを達成しようとしている問題は、単語がタイプされたらフラグを投げることです、そのクラスの下のすべての単語がアクティブになります。 これは私の古いコードの例です。 https://jsfiddle.net/aydg436k/ – Pyreal

+0

リスト内の単語をアクティブにするか、アクティブにしたい単語が入力された場所に入力しますか?編集:さて、私はフィドルを見た後それを得た。誰も答えを出してお答えしなければ、できるだけ早く私はあなたにお返しします。 –

答えて

1

方法:

<template> 
    <input v-for="(hi,index) of highlights" v-model="highlights[]" v-bind:class="{ active: highlights[index] }" v-on:keyup="highlighting(index)"></input> 
</template> 

<script> 
export default{ 
    data() { 
     return { 
      highlights: [] 
     }; 
    }, 
    created() { 
     this.$http.get('some/api').then(res => { 
      // map: convert 0,1 to false,true 
      this.highlights = res.json().map(h => h==1); 
     }); 
    }, 
    methods: { 
     highlighting(index) { 
      if (this.highlights[index]) { 
       // this.highlights[index] = false won't let vue detect the data change(thus no view change) 
       this.highlights.splice(index, 1, false); 
      } else { 
       this.highlights.splice(index, 1, true); 
      } 
     } 
    } 
} 
</script> 
0

ここに一つの方法です(ところで遅れて申し訳ありません)それを行う

HTML:

<div id="app"> 
     <p :class="{'active': activateWord(word)}" v-for="word in words">@{{ word }}</p> 
     <input type="text" v-model="inputText"> 

    </div> 

CSS:

.active { 
    color: red; 
} 

JS:

const app = new Vue({ 
    el: '#app', 
    data: { 
     inputText: '', 
     words: [ 
     'foo', 
     'bar' 
     ] 
    }, 
    methods: { 
     activateWord(word) { 
      return this.inputText === word 
     }, 
    }, 
}) 

here「SAフィドル

関連する問題