質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PWA(Progressive Web Apps)

PWA(Progressive Web Apps)は、アプリのようなWebサイトを指します。仕様が異なる様々なデバイスで表示でき、インストールも不要。さらに訪問し続けることでユーザーについて学び、強力なPWAとなります。

Q&A

0回答

276閲覧

vue.jsでマインスイーパーを作っているのですが

coboler_wakate

総合スコア12

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

PWA(Progressive Web Apps)

PWA(Progressive Web Apps)は、アプリのようなWebサイトを指します。仕様が異なる様々なデバイスで表示でき、インストールも不要。さらに訪問し続けることでユーザーについて学び、強力なPWAとなります。

0グッド

0クリップ

投稿2019/02/19 05:33

単一コンポーネントです
vue.js勉強のためマインスイーパーを作成しています。作成中のもので申し訳ありません。

クリックしたマスを、そのマスの状態によって画面上の表示を変化させようとしているのですが、
そのマスの状態と表示が紐づかないという事象が起きています。バインドされていないのでしょうか?

tableの中でv-forで回している箇所でtdをクリックするとboxの状態が変化します。

以下が該当のソースコードです。

<template> <div class="hello"> <h1>{{ msg }}</h1> <h2>minesweeper</h2> <button type="button" name="button" v-on:click="init">start</button> <table> <tr v-for="line in boxes"> <td v-for="box in line" v-on:click="open(box)">{{box.type}}</td> </tr> </table> </div> </template> <script> export default { name: 'minesweeper', data () { return { msg: 'Welcome to minesweeper', width: 10, height: 10, boxes: [], bomb_rate: 0.2 } }, methods: { //フィールドを初期化 init: function () { //空の配列10*10を用意 for(let i=0;i<this.height;i++){ this.boxes.push(new Array(this.width)) } var box_id = 0; //それぞれのboxの設定をする for(let i=0;i<10;i++){ for(let j=0;j<10;j++){ this.boxes[i][j] = { id: box_id, type: 'a', //ユーザーから見えるboxの種類 bomb_count: 0, //隣接しているbombの数 is_opened: false, //クリックしたかどうか is_bomb: Math.random()<this.bomb_rate, //boxにbombを埋めるかどうか } box_id++; } } //それぞれのboxのbomb_countを計算する console.log(this.boxes[0][4]) }, //ユーザーがboxをクリックしたとき open: function(box){ this.decideType(box); box.is_opened = true; console.log(box); }, //対象のboxのtypeを決定する decideType: function(box){ //すでにクリックされていた場合 if(box.is_opened){ return; } //クリックしたboxがbombだった場合 if(box.is_bomb){ box.type = "x"; return; } //bomb_countがゼロの場合、周辺のゼロのboxを開けていく if(box.bomb_count == 0){ // box.type = 'x'; //周辺のbox開封処理 } box.type = String(box.bomb_count); console.log(box); } } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> * { font-family: 'arial'; font-weight: bold; } /* margin */ /* font */ * { font-family: 'arial'; font-weight: bold; } table { border-collapse: collapse; border: solid thick; } td { height: 2.0em; width: 2.0em; padding: 0; border: solid thin; border-color: black; text-align: center; font-weight: bold; background-color: lightgrey; } </style>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

user14

2019/02/24 00:29

本題と関係ないですが入力中、入力欄の上に<code>というボタンが表示されますよね? それを押すとコードを見やすい形式で挿入できるので読む人が増えて答えてもらいやすくなりますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問