Axios返回数据时加载不了vue列表(已解决)

  |   Vue.js Javascript Axios

使用Axios请求豆瓣API接口,然后返回响应数据之后,接着vue遍历列表渲染在页面,其实写的不难的。如果想测试vue简单的例子的话,建议用JSFiddle在线调试工具,可以看看测试是否OK,要是测试完毕OK就可以把代码复制到项目文件里面的。

HTML文件:

+ <div id="app">
+        <ul>
+          <li v-for="item in movies">
+             {{item.title}}
+          </li>
+        </ul>
+ </div>

引入vue和axios文件

 <div id="app">
      <ul>
        <li v-for="item in movies">
           {{item.title}}
        </li>
      </ul>
  </div>
+ <script src="https://cdn.jsdelivr.net/npm/vue"></script>
+ <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

javascript文件

+ var vm = new Vue({
+        el: '#app',
+        data: {
+            movies: []
+        },
+        created() {
+            this.getMovie();
+        },
+        methods: {
+            getMovie: function () {
+                axios.get("https://api.douban.com/v2/movie/top250")
+                    .then(function (res) {
+                        console.log(res.data.subjects);
+                        this.movies = res.data.subjects;
+                    })
+                   .catch(function (error) {
+                        console.log(error);
+                    });
+            }
+        }
+    })     

但是我发现加载不了列表页面的问题,我不知道继续怎么修改一下呢?

后来在Stack Overflow技术回答网站终于得到了一个答案:

现在把函数改成es6箭头符号()=> {...}。这样,可以分配this.movi​​es时保留此上下文

改成最终效果是:

+ var vm = new Vue({
+        el: '#app',
+        data: {
+            movies: []
+        },
+        created() {
+            this.getMovie();
+        },
+        methods: {
+            getMovie: function () {
+                axios.get("https://api.douban.com/v2/movie/top250")
-                    .then(function (res) {
+                    .then(res => {
+                        console.log(res.data.subjects);
+                        this.movies = res.data.subjects;
+                    })
-                   .catch(function (error) {
+                   .catch(error => {
+                        console.log(error);
+                    });
+            }
+        }
+    })     

JSFiddle效果一下: