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

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

ただいまの
回答率

88.79%

vue-star-ratingのcreated()が動かない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 517

reud

score 21

Vue.js初心者です。

vue-star-rating
こちらを用いて評価項目を作ろうとしていました。
左上に評価の内容を出して欲しく、v-chipと組み合わせたコンポーネント(AppEvaluationItem.vue)を作成しました。
以下ソースコードです。

<template>
    <div :class="border ? 'material' : ''">
        <v-chip label color="pink" text-color="white">
            <v-icon left>label</v-icon>
            {{tagLabel}}
        </v-chip>
        <star-rating
                v-model="model"
                :increment="output ? 0.01 : 0.5"
                :rating="3"
                @rating-selected="ratingSelected"
                @current-rating="currentRating"
                :read-only="output"></star-rating>
    </div>
    <!-- from https://www.npmjs.com/package/vue-star-rating */ -->


</template>

<script>
    import StarRating from "vue-star-rating/src/star-rating";
    export default {
        name: "AppEvaluationItem",
        components: {StarRating},
        data: function() {
            return {
                model: null,
            }
        },
        props: {
            output: {
                type: Boolean,
                default: false
            },
            rating: {
                type: Number,
                default: 0
            },
            border: {
                type: Boolean,
                default: false
            },
            tagLabel: {
                type: String,
                default: 'default'
            }
        },
        methods: {
            ratingSelected: function (val) {
                this.$emit('rating-selected',val)
            },
            currentRating: function (val) {
                this.$emit('current-rating',val)
            }
        }
    }
</script>

<style scoped>
div.material{
    border: 1px solid #64B5F6;
    width: 280px;
}
</style>

動作を確認したいために、ShowCase.vueというコンポーネントを作成し、以下のように書きました。

<template>
    <div>
        <p>
            This is ShowCase
        </p>
        <p>
            <app-evaluation-item
                    border
                    :model="evaluationItemModel"
                    :tag-label="'心地よさ'"
                    @rating-selected="EventTest">
            </app-evaluation-item>
            <app-evaluation-item
                    output
                    :model="evaluationItemModel2"
                    :rating="2.72"
                    :tag-label="'心地よさ(集計結果)'"
                    @rating-selected="EventTest">
            </app-evaluation-item>
            <star-rating
                    :increment="output ? 0.01 : 0.5"
                    :rating="3"></star-rating>
        </p>
    </div>
</template>

<script>

    import AppEvaluationItem from "./AppEvaluationItem";
    import StarRating from "vue-star-rating/src/star-rating";

    export default {
        name: "ShowCase",
        components: {AppEvaluationItem, StarRating},
        data: function () {
            return {
                evaluationItemModel: null,
                evaluationItemModel2: null
            }
        },
        methods: {
            EventTest: function (val) {
                alert(`occured ${val}`);
            }

        }
    }

</script>

<style scoped>

</style>

上が入力用で下は結果の平均をまとめて、出力する事を想定しています。:rating="2.72"として読み込み時に表示したいところ、うまく初期値の読み込みができていません。(chromeのdevtoolsで確認したところ、vue-star-rating内のratingがnullになってしまっている)ソースコードを確認したところ、vue-star-ratingはcreated()で初期値を渡しているのですがそれがうまくいって無さそうということがわかりました。

しかし、ShowCase.vueに直接vue-star-ratingを入れた場合はratingが読まれ、適切に初期値が設定されています。
(:rating="3" で正しく初期値が設定されている)

原因は何でしょうか。またどうすればAppEvaluationItem内で初期値を設定できるのでしょうか

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

v-modelを定義しなければうまく動くことが分かりました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る