Vueでemitした値でデータの更新ができない
問題
Vueの学習のためオセロを作っています。
Vueで親コンポーネントからturnを子コンポーネントに渡し、子コンポーネントではturnをplayerTurnに格納して変更してからemitで親に返しています。
親コンポーネントでは受け取ったplayerTurnをturnに格納して値を変更しているのですが、console.logでみると変わっていますが、dataのturnはblackのままです。emitで受け取った値でdataの値を変えるにはどうしたらよいでしょうか?
(クリックするとturnの色のオセロの石を置けるのですが、ずっと黒の石のままになってしまいます。)
js
1//親コンポーネント 2template> 3 <div class="game"> 4 <h3>{{ whosTurn(turn) }}のターン</h3> 5 <Board 6 :board= "board" 7 :turn = "turn" 8 @putStone="whosTurn($event)" 9 /> 10 </div> 11</template> 12 13<script lang="ts"> 14import Vue from 'vue' 15import Board from '@/components/reversi/Board.vue' 16import { Board as BoardModel } from '../../model/reversi' 17 18export default Vue.extend({ 19 data() { 20 return { 21 board: new BoardModel(), 22 turn: 'black' 23 } 24 }, 25 components: { 26 Board 27 }, 28 methods: { 29 whosTurn(playerTurn: 'black' | 'white') { 30 console.log(this.turn) 31 this.turn = playerTurn 32 console.log(this.turn) 33 return playerTurn === 'black' ? '黒' : '白' 34 } 35 } 36}) 37</script>
js
1//子コンポーネント 2<template> 3 <div 4 :class="cellxy" 5 class="cellSize" 6 @click="putStone()" 7 > 8 <div class="cell"></div> 9 <div class="stone"></div> 10 </div> 11</template> 12 13<script lang="ts"> 14import Vue from 'vue' 15 16export default Vue.extend({ 17 props: ['cell', 'turn'], 18 data() { 19 return { 20 reversicell: this.cell, 21 stoneState: this.cell.state, 22 cellxy: `cell${this.cell.x}${this.cell.y}`, 23 playerTurn: this.turn 24 } 25 }, 26 mounted() { 27 this.addColorClass() 28 }, 29 methods: { 30 addColorClass() { 31 const cellBox = document.querySelector(`.${this.cellxy}`)! 32 cellBox.querySelector('.stone')!.classList.add(this.stoneState) 33 }, 34 putStone() { 35 if (this.stoneState === 'None') { 36 this.stoneState = this.playerTurn 37 this.addColorClass() 38 this.playerTurn === 'white' ? this.playerTurn = 'black' : this.playerTurn = 'white' 39 this.$emit('putStone', this.playerTurn) 40 } 41 }, 42 } 43}) 44</script>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。