多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 豆瓣250对比 [小程序](https://www.kancloud.cn/book/henputongderen/xiaochengxu/edit) [React](https://www.kancloud.cn/book/henputongderen/react/edit) ## 完整代码 [完整代码](https://gitee.com/dingmeili/note/tree/master/vues/douban250) ## 知识细分 ### 1.axios请求 > 安装依赖 ``` npm i axios --save npm i aixos-jsonp-pro --save // 跨域时安装 ``` > 在请求页面引入 ``` import axios from "axios"; //import axios from "axios-jsonp-pro";跨域时引入 ``` >请求代码 ``` mounted() { var url = "http://192.168.22.2/movie/top250"; axios.jsonp(url).then(res => { this.handleData(res); }); }, ``` ### 2. 通过id跳转页面 #### 2.1.定义点击事件向父组件传值 ``` @click ="handleClick" methods: { handleClick() { // 子组件自定义事件,向父组件传参 this.$emit("jump", this.movie.id); } } ``` #### 2.2 父组件进行跳转 >@jump\="onJump" ``` onJump(id){ this.$router.push('/about/'+id); }, ``` #### 2.3.详情页 接收id 发送请求 > 在router.js中接上id ` path: '/about/:id',` ``` mounted() { var id = this.$route.params.id; var url = "https://douban.uieee.com/v2/movie/subject/"; axios.jsonp(url + id).then(res => { this.imgUrl = res.images.small; this.title = res.title; this.summary = res.summary; }); } ``` ### 3.vue设置数据的要点 > 要在data中定义 ``` data() { return { imgUrl: "", title: "", summary: "" }; }, ``` > 设置数据到data里 ``` this.imgUrl \= res.images.small; this.title \= res.title; this.summary \= res.summary; ``` #### 对比小程序与react ``` 小程序 this.setData({}) react this.setState({}) ``` ### 4.上拉刷新 [组件链接](https://youzan.github.io/vant/#/zh-CN/list) #### 使用Vant组件库中List组件实现 - 1.安装组件 > npm i vant -S - 2.main.js中导入组件 > import Vant from 'vant'; > import 'vant/lib/index.css'; > Vue.use(Vant); - 3.使用组件 ``` <div> //一定要用div将组件包起来,不然会报错 <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> <div class="home"> <movie-item v-for="(item,index) of movies" :key="index" :movie="item"></movie-item> </div> </van-list> </div> ``` - 4.通过组件中绑定的事件触发刷新 > onLoad会在页面加载的时候就触发该事件,加载初始页面也可以在这个函数里实现 ``` export default { data() { return { list: [], loading: false, finished: false }; }, methods: { onLoad() { // 异步更新数据 然数据加载完再更新 setTimeout(() => { for (let i = 0; i < 10; i++) { this.list.push(this.list.length + 1); } // 加载状态结束 this.loading = false; // 数据全部加载完成 if (this.list.length >= 40) { this.finished = true; } }, 500); } } } ```