katsumasa0514
@katsumasa0514 (ASAP k)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

vueのcreatedが機能しません。

Q&A

Closed

経緯

djangoで得たデータをhtmlに表示した後、そのデータをvueに送り処理を行うという流れの
プログラムを書いています。
今回、データをvueのdataに反映させることはできたのですが、その後createdで設定したプログラムが動かず困っています。

エラー

『isAxiosError.js:10 GET https://api.themoviedb.org/3/movie/undefined?api_key=8b69f0f0a440bb756a0214210c6ed6c2&language=ja&page=1&include_adult=false 404』
エラーは単純でページが見つからないとのこと。
URLの「undefined」の部分にデータが入って欲しい。

html
            {% for topic in topicData %}
                <b-row>
                    <b-col cols="12" sm="9">
                        <b-row>
                            <input type="text" v-model="movie_id" v-init:movie_id="{{topic.movie_id}}">
                        </b-row>
                        <h6>[[ movies.title ]]</h6>
                    </b-col>
                <b-row>
             {% endfor %}

vue
<script>
    app = new Vue({
        delimiters: ['[[', ']]'],
        el: "#app",

        methods: {
            getMovies: function (movie_id) {
                axios.get(`https://api.themoviedb.org/3/movie/${movie_id}?api_key=8b69f0f0a440bb756a0214210c6ed6c2&language=ja&page=1&include_adult=false`)
                    .then(response => {
                        this.movies = response.data
                    })
            }
        },

        created() {
            this.getMovies();
            this.getMoviesImage();
        },

        data: {
            movie_id: '',
            movies: '',
        },

        directives: {
            init: {
                bind: function (el, binding, vnode) {
                    vnode.context[binding.arg] = binding.value
                }
            }
        }

    });

</script>

htmlのinputで初期値を設定してv-modelにバインドさせました。
なのでページを立ち上げたらdataは更新されるのですが、vueの方のcreatedがエラーを起こしているようです。
vueのdataに反映する前にcreatedでの処理が動いてしまっていると考え、mounted、updated、$nextTickなども試したのですがうまくいかず息詰まってしまいました。

詳しい方がお見えになりましたらよろしくお願いします。

至らない点も多々あるかと思いますが、よろしくお願いします。

0

3Answer

getMovies を呼ぶときに引数を渡す必要があるのではないでしょうか。

1Like

Comments

  1. @katsumasa0514

    Questioner

    this.getMovies(movie_id);で試しましたがエラーが出てしまいます。

    エラー(vue.min.js:6 ReferenceError: movie_id is not defined)
    これだとやはり読み込みの順番が違うのでしょうか?
  2. `this.getMovies(this.movie_id);` ではないでしょうか。
    処理の順序など関係なく単にJavaScriptの記述で躓いているだけに見えますが、もうどうでも良いことでしたね。
  3. @katsumasa0514

    Questioner

    引数にもthisをつける必要があったんですね、、、
    いえいえ参考になりました!
    ありがとうございました。

Comments

  1. @katsumasa0514

    Questioner

    前回に続きありがとうございます。
    カンマは質問を作る際に消し忘れてしまいました。
    今回は別のところに要因があるようです、、、

watchなど他にも試しましたが上手くいかなかったので、今回はDBを作り直しデータをpythonの方から出力するように変更しました。
ご協力いただき本当にありがとうございました。

0Like

Your answer might help someone💌