2017-06-28 5 views
1

私はユーザーにいくつかのオプションを表示するコンポーネントを持っています。ユーザーは彼が好きなオプションをクリックしてフォームを送信できるはずです。vue.jsのクリックでどのようにクラスを切り替えることができますか?

ユーザーに何らかのフィードバックを与えるために、私はクラスv-on:clickをトグルしたいと思います。クリックobject.selected = trueselectObjectType()内のobject.typeの機能に設定するにはどうすればよいですか?

Vue.component('obj', { 
 
    props: ['name'], 
 
    template: '<div>{{ name }}</div>' 
 
}) 
 

 
new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    message: 'Please select:', 
 
    objectTypes: [ 
 
     { type: 'Cat', selected: false }, 
 
     { type: 'Dog', selected: false }, 
 
     { type: 'Fish', selected: false }, 
 
     { type: 'Bear', selected: false }, 
 
    ], 
 
    }, 
 
    methods: { 
 
    \t selectObjectType: function (object) { 
 
     console.log('Selected:', object.type) 
 
     // how can I change set object.selected = true for the clicked object.type? 
 
     
 
    } 
 
    } 
 
})
.col { 
 
    height: 200px; 
 
    width: 20%; 
 
    cursor: pointer !important; 
 
    margin-right: 2.5%; 
 
    margin-left: 2.5%; 
 
    border-radius: 3px; 
 
    border: 1px solid lightgray; 
 
    padding: 20px; 
 
    box-sizing: border-box; 
 
    float: left; 
 
} 
 

 
.col:hover { 
 
    border-color: #000; 
 
} 
 

 
.col.selected { 
 
    border-color: green; 
 
}
<script src="https://unpkg.com/vue"></script> 
 

 
<div id="app"> 
 
    <p>{{ message }}</p> 
 
    <obj 
 
    class="col" 
 
    v-for="object in objectTypes" 
 
    @click.native="selectObjectType(object)"  
 
    :key="object.id" 
 
    :name="object.type" 
 
    :class="{ 'selected': object.selected}" 
 
    > 
 
    </obj> 
 
</div>

+0

。あなたのselectObjectType関数の中で。他のすべてをfalseに設定する必要があります。 –

+0

@abhishekkannojiaこれはスクリプトエラーの原因になりますが、これは私がやりたいことです! –

+0

@JVLoboユーザーは複数の回答を選択できるはずですので、各項目のクラスを個別に切り替えたい –

答えて

2

Vue.component('obj', { 
 
    props: ['name'], 
 
    template: '<div>{{ name }}</div>' 
 
}) 
 

 
new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    message: 'Please select:', 
 
    objectTypes: [ 
 
     { type: 'Cat', selected: false }, 
 
     { type: 'Dog', selected: false }, 
 
     { type: 'Fish', selected: false }, 
 
     { type: 'Bear', selected: false }, 
 
    ], 
 
    }, 
 
    methods: { 
 
    \t selectObjectType: function (object) { 
 
     object.selected = !object.selected; 
 
     console.log('Selected:', object.type) 
 
     
 
    } 
 
    } 
 
})
.col { 
 
    height: 200px; 
 
    width: 20%; 
 
    cursor: pointer !important; 
 
    margin-right: 2.5%; 
 
    margin-left: 2.5%; 
 
    border-radius: 3px; 
 
    border: 1px solid lightgray; 
 
    padding: 20px; 
 
    box-sizing: border-box; 
 
    float: left; 
 
} 
 

 
.col:hover { 
 
    border-color: #000; 
 
} 
 

 
.col.selected { 
 
    border-color: green; 
 
}
<script src="https://unpkg.com/vue"></script> 
 

 
<div id="app"> 
 
    <p>{{ message }}</p> 
 
    <obj 
 
    class="col" 
 
    v-for="object in objectTypes" 
 
    @click.native="selectObjectType(object)"  
 
    :key="object.id" 
 
    :name="object.type" 
 
    :class="object.selected ? 'selected' : ''" 
 
    > 
 
    </obj> 
 
</div>

1

私はよく理解している場合は、項目の選択を解除/セレクする]をクリックします。

私はこの方法があることを行うだろう

:あなたは真= object.selectedを行うことができます

Vue.component('obj', { 
 
    props: ['name'], 
 
    template: '<div>{{ name }}</div>' 
 
}) 
 

 
new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    message: 'Please select:', 
 
    objectTypes: [ 
 
     { type: 'Cat', selected: false }, 
 
     { type: 'Dog', selected: false }, 
 
     { type: 'Fish', selected: false }, 
 
     { type: 'Bear', selected: false }, 
 
    ], 
 
    }, 
 
    methods: { 
 
    \t selectObjectType: function (object) { 
 
     console.log('Selected:', object.type) 
 
     // how can I change set object.selected = true for the clicked object.type? 
 
     object.selected = !object.selected; 
 
    } 
 
    } 
 
})
.col { 
 
    height: 200px; 
 
    width: 20%; 
 
    cursor: pointer !important; 
 
    margin-right: 2.5%; 
 
    margin-left: 2.5%; 
 
    border-radius: 3px; 
 
    border: 1px solid lightgray; 
 
    padding: 20px; 
 
    box-sizing: border-box; 
 
    float: left; 
 
} 
 

 
.col:hover { 
 
    border-color: #000; 
 
} 
 

 
.col.selected { 
 
    border-color: green; 
 
}
<script src="https://unpkg.com/vue"></script> 
 

 
<div id="app"> 
 
    <p>{{ message }}</p> 
 
    <obj 
 
    class="col" 
 
    v-for="object in objectTypes" 
 
    @click.native="selectObjectType(object)"  
 
    :key="object.id" 
 
    :name="object.type" 
 
    :class="{ 'selected': object.selected}" 
 
    > 
 
    </obj> 
 
</div>

関連する問題