【问题标题】:VueJs method syntaxVueJs 方法语法
【发布时间】:2018-05-11 12:48:39
【问题描述】:

我正在尝试通过电影标题创建循环但没有显示任何内容,我想我可能有语法问题。查看我的 VueJs 应用程序时,我可以在控制台中看到对象数组。我在 Drupal 中创建了一个视图,它以 Json 格式输出。应用程序控制台没有显示任何错误,它可以访问我的视图。我在本地主机上。我的 Vue app.js 文件如下所示:

apiURL = "http://moviesapi/api/movies"

new Vue({
    el: '#app',

    data: {

    },

    ready: function(){
        this.getMovies();
    },

    methods: {
        getMovies: function(){

            this.$http.get(apiURL, function(movies){
                this.$set('movies', movies);

            });
        }
    }
})

我的 index.html 看起来像这样:

<div class="container" id="app">
<div v-for="movie in movies">
   <h4>{{ movie.title[0].value }}</h4>
</div>
</div>

这是我的本地主机上http://moviesapi/api/movies 的 json 输出的一部分:

[

{
    "nid": [
        {
            "value": 2
        }
    ],
    "uuid": [
        {
            "value": "5a4c3948-4828-476f-968e-d4c754641c36"
        }
    ],
    "vid": [
        {
            "value": 2
        }
    ],
    "langcode": [
        {
            "value": "en"
        }
    ],
    "type": [
        {
            "target_id": "movies",
            "target_type": "node_type",
            "target_uuid": "2a459370-903b-4376-a2c9-0dfb93d21dd8"
        }
    ],
    "revision_timestamp": [
        {
            "value": "2018-05-10T19:42:25+00:00",
            "format": "Y-m-d\\TH:i:sP"
        }
    ],
    "revision_uid": [
        {
            "target_id": 1,
            "target_type": "user",
            "target_uuid": "8fe68b9e-aef6-46eb-be60-5d31651de666",
            "url": "/user/1"
        }
    ],
    "revision_log": [ ],
    "status": [
        {
            "value": true
        }
    ],
    "title": [
        {
            "value": "Star Wars"
        }
    ],

【问题讨论】:

标签: javascript vue.js


【解决方案1】:
  • ready 挂钩适用于 Vue 1。在版本 2 中,您需要使用 createdmounted
  • 您应该在数据对象中预先声明movies,而不是使用this.$set
  • 你在使用 vue 资源吗?我认为您的this.$http.get 电话可能不正确;我认为它不接受回调,它返回一个 Promise。此外,该函数未绑定到 this,这可能是个问题(请改用箭头函数语法)。

针对 Vue 2 修改:

new Vue({
    el: '#app',

    data: {
        movies: [],
    },

    mounted() {
        this.getMovies();
    },

    methods: {
        getMovies() {
            this.$http.get(apiURL).then(res => {
                this.movies = res.data;
            });
        }
    }
})

否则,如果您使用的是 Vue 1,那么请保持 ready 原样。

【讨论】:

  • 是的,我正在使用 vue-resource v1.5.0。和 Vue.js v1.0.11。我正在关注本教程watch-learn.com/series/one-page-app-with-drupal-8-and-vuejs 第 2 步。我进行了您所做的更改,但仍然没有显示。我应该升级 vue-resource v1.5.0 和 Vue.js v1.0.11
  • 我更新到了 Vue.js v2.5.17-beta.0。进行了更改。现在我得到这个错误。类型错误:movie.title 未定义。我的 html 输出是这个 {{ movie.title[0].value }}
  • 我的 div 看起来像这样。

    {{ movie.title[0].value }}

    .
  • 除非有理由(例如使用遗留代码库),否则不应使用 Vue 1。如果你只是在学习 Vue,那么你应该学习最新版本。 那个教程已经过时了。 至于“movie.title is undefined”,你有没有没有标题的电影?确认数组中的每部电影都有一个标题。
  • 也升级到最新版本的vue-resource。我对答案进行了更改。
猜你喜欢
  • 2019-08-20
  • 2019-01-13
  • 2020-10-09
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多