vue数据对象存储后如何修改json数据

How to modify json data in after storing in vue data object

这是我的 vue 代码:

new Vue({
    el : '#root',

    data : {
        blog : []
    },

    created() {
       this.$http.get('https://jsonplaceholder.typicode.com/posts')
           .then(function(response) {
               // console.log(response.data)
               this.blog = response.data
           })
           .catch(function (error) {
               this.error = 'Error! Could not reach the API. ' + error
         })
   }

});

我的 html 代码是:

<div id="root" class="container">
        <ul v-for="post in blog">
            <li> {{ post.id }}  </li>
            <li>{{ post.userId }} </li>
            <li>{{ post.title }} </li>
        </ul>

    </div>

现在我可以显示每个用户的名字就好了,但是我想修改一些东西,比如如果用户id是1,那么用户的名字就会变成"Smith"。 我试过这段代码:

mounted() {
        if (this.blog[0].userId == 1) {
                this.blog[0].userId = 'Smith'
          }
    }

但是它显示这个错误:

Uncaught TypeError: Cannot read property 'userId' of undefined

如果我在带有事件的方法中使用它就可以正常工作!如何做到这一点?

console.log之后(this.blog)

也在 console.log(this.blog[0].userId) 之后我得到:“1”

问题是您在 mounted() 方法中的代码在将 response.data 推入 blog 数组之前完成。所以这就是它无法读取任何属性的原因。

您可以在获取数据后调用方法,在 then() 回调中确保博客数组中有数据,然后调用用于处理博客的方法:

new Vue({
  el: "#vue",
  data() {
    return {
      blog: []
    };
  },
  methods: {
    changeNames() {
      if (this.blog[0].userId == 1) {
        this.blog[0].userId = "Smith";
      }
    }
  },
  created() {
    Vue.http
      .get("https://jsonplaceholder.typicode.com/posts")
      .then(response => {
        this.blog = response.data;
        this.changeNames();
      })
      .catch((error) => {
        this.error = "Error! Could not reach the API. " + error;
      });
  }
});

这是工作示例:jsFiddle