# Vue移动端项目1 **Repository Path**: mrreeed/vue-mobile-terminal-project-1 ## Basic Information - **Project Name**: Vue移动端项目1 - **Description**: Vue移动端项目,使用Mint-UI、MUI等实现,B站视频名叫“学 Vue.js 看这个就够了”(https://www.bilibili.com/video/BV11s411A7h6?p=127&t=90) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-02-28 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 📱这是一个Vue移动端项目
### 本项目采用MIT开源协议,开源协议放置在LICENSE文件中 #### [主流开源协议之间有何异同?](https://www.zhihu.com/question/19568896)
### Vue移动端项目,使用Mint-UI、MUI等实现 ### 学习的B站视频名叫“学 Vue.js 看这个就够了”( https://www.bilibili.com/video/BV11s411A7h6?p=127&t=90 )

### 整理整个代码目录的结构: LICENSE文件存放项目开源项目 .gitignore文件存放不需要git托管的模块 ## 💻用命令行把修改过后的代码上传到码云: 1. git add . (把 本地文件 放到 暂存区) 2. git commit -m "输入提交信息" (把 本地文件 放到 本地仓库 里面) 3. git push 或 git push -u origin master (把 本地仓库 的文件推送到远程仓库 push)

# 💡步骤 ## 制作首页App组件 1. 完成Header区域,使用的是Mint-UI中的Header组件 2. 制作底部的Tabbar区域,使用的是MUI的Tabbar.html + 在制作 购物车小图标 的时候,操作会相对多一些: + 先把 扩展图标的css样式,拷贝到项目中 + 拷贝 扩展字体库ttf文件,到项目中(否则会报ttf的错) + 为购物车小图标,添加如下样式mui-icon mui-icon-extra mui-icon-extra-cart 3. 要在中间区域放置一个 router-view 来展示路由匹配到的组件

## 注册使用VueRouter ```javascript // 导入router的几个步骤step: // step 1.导入路由的包 import VueRouter from 'vue-router' // step 2.安装路由 Vue.use(VueRouter) //这样项目才启动了路由 // step 3.导入自己的router.js路由模块 import router from './router.js' // step 4.挂载路由对象到VM实例上,见下面VM部分: var vm = new Vue({ el:'#app', render:c=>c(app), router }) ```
## 改造 Tabbar 为 router-link 将原本的`a`标签改为`router-link`标签,并将本属于`a`标签的`href`属性改为`router-link`的`to`属性。 改完to后,也要将跳转路径作更改,此路径要和router.js中的path相对应。 ```javascript // to后的/home是跳转路径 ``` 此路径要和router.js中的path相对应: ```javascript { path:'/home',component:HomeContainer } ```
## 设置路由高亮 默认情况下,Vue-router会自动给触发路由跳转的元素 添加类名router-link-active 以示跳转。但如果使用了UI组件,该组件一般封装了路由跳转时用于高亮的类名(这样也避免了手动书写高亮css),就要在router.js中设置组件的路由跳转类名。 以MUI为例,Tabbar 路由触发点击跳转时,会高亮 Tabbar 的图标,高亮的原理是添加了类名 mui-active ,实际上相当于覆盖了Vue-router原生的router-link-active ```javascript var router = new VueRouter({ routes: [ ], linkActiveClass:'mui-active'//覆盖默认的路由高亮的类, //默认的类叫做router-link-active(通过检查元素可以看到) }) ```
## 配置路由 ```javascript import VueRouter from 'vue-router' // 导入对应的路由组件 import HomeContainer from './components/HomeContainer.vue' import MemberContainer from './components/MemberContainer.vue' import ShopcarContainer from './components/ShopcarContainer.vue' import SearchContainer from './components/SearchContainer.vue' // 3. 创建路由对象 var router = new VueRouter({ routes: [ // 配置路由注册 { path:'/home',component:HomeContainer }, { path:'/member',component:MemberContainer }, { path:'/shopcar',component:ShopcarContainer }, { path:'/search',component:SearchContainer } ], linkActiveClass:'mui-active'//覆盖默认的路由高亮的类,默认的类叫做router-link-active(通过检查元素可以看到) }) // 把路由对象暴露出去 export default router ``` 在App.vue中展示路由匹配的页面组件 ```html ``` ### 点击 Tabbar 中的路由链接,实现展示对应的路由组件
## 制作首页布局 ## 加载首页轮播图数据 1. 获取数据,使用 vue-resource (类似于axios)获取 2. 使用 `vue-resource` 的 `this.$http.get` 获取数据 3. 获取到的数据,要保存到 data 中 4. 使用 v-for 循环渲染每个 item 项 ## 改造新闻资讯路由链接 ## 新闻资讯 页面 制作 1. 绘制界面,使用MUI中的media-list.html 2. 使用 `vue-resource` 获取数据 3. 渲染真实数据 ## 实现 新闻资讯列表 点击跳转到 新闻详情 1. 把列表中的每一项改造为 router-link ,同时,在跳转的时候应该提供唯一的Id标识符 2. 创建新闻详情的组件页面 NewsInfo.vue 3. 在路由模块中,将新闻详情的路由地址和组件页面对应起来 ## 实现 新闻详情的 页面布局(css) 和 数据渲染($http或ajax) 1. 封装一个getComments()方法 ## 单独封装一个 comment.vue 评论子组件 1. 先创建一个 单独的 comment.vue 组件模板 2. 在需要使用 comment 组件的页面中,先手动导入 comment 组件: + `import comment from './comment.vue'` 3. 在父组件中,使用`components`属性(该属性属VM层,和data、methods并列),导入刚才的 comment 组件,注册为自己的子组件 4. 将注册子组件时候的注册名称,以标签形式,在页面中引用即可 ## 获取所有的评论数据显示到页面中 ## 实现点击加载更多评论的功能 1. 为加载更多按钮,绑定点击事件,在事件中,请求下一页数据 2. 点击加载更多,让 pagerndex++,然后重新调用 this.getcomments() 方法重新获取最新一页的数据 3. 为了防止 新数据覆盖老数据 的情况,我们在点击"加载更多"的时候,每当获取到新数据,应该让老数据调用数组的`concat`方法,拼接上新数组 ## 发表评论 1. 把文本框做双向数据绑定 2. 为发表按钮绑定一个事件 3. 校验评论内容是否为空,如果为空,则Toast提示用户评论内容不能为空 4. 通过 vue-resource 发送一个请求,把评论内容提交给服务器 5. 当发表评论ok后,重新刷新列表(过程),以查看最新的评论(目的) + 如果调用 getcomments 方法重新刷新评论列表的话,因为此时已经点击了“加载更多”按钮,可能只能得到最后一页的评论,重新加载后前几页的评论获取不到 + 换一种思路:当评论成功后,在客户端,手动拼接出一个最新的评论对象,然后调用数组的 unshift 方法,把最新的评论,追加到 data 中 comments 的开头;这样,就能完美实现刷新评论列表的需求; ## 改造图片分析按钮 为 路由的链接 并显示对应的组件页面 ## 绘制 图片列表 组件页面结构并美化样式 1. 制作顶部的滑动条 2. 制作底部的图片列表 ### 制作顶部滑动条: 1. 需要借助于 MUI 中的 `tab-top-webview-main.html` 2. 需要把 slider 区域的 mui-fullscreen 类去掉 3. 滑动条无法正常触发滑动,通过检查官方文档,发现这是JS组件,需要被初始化一下: + 导入mui.js + 调用官方提供的方式初始化: ```javascript mui('.mui-scroll-wrapper').scroll({ deceleration:0.0005 //flick 减速系数,系数越大,滚动速度越慢,滚动距离越小,默认值0.0006 }); ``` 4. 我们在初始化 滑动条 的时候,导入的 mui.js,但是,控制台报错: `Uncaught TypeError:'caller','callee',and 'arguments' properties may not be accessed on strict mode` + 经过我们合理的推测,可能是mui.js中用到了`'caller','callee','arguments'`这些东西,但是,webpack 打包好的 bundle.js 中,默认是启用严格模式的,所以,这两者冲突了; + 解决方案: 1. 把mui.s中的非严格模式的代码改掉;但是不现实; 2. 把 webpack打包时候的 严格模式 禁用掉; 5. 刚进入图片分享页面的时候,滑动条无法正常工作,后经发现,如果要初始化滑动条,必须要等DOM元素加载完毕,所以我们把初始化滑动条的代码,搬到了mounted生命周期函数中; 6. 当滑动条调试ok后,发现tabbar无法正常工作了,这时候,我们需要把每个tabbar按钮样式的 类名 mui-tab-item 重新改一下名字; 7. 获取所有分类,并渲染分类列表; ## 动态添加class类名:(注意这里类名是数组形式) ```html {{item.title}} ``` ### 制作图片列表区域 1. 图片列表需要使用懒加载技术,我们可以使用 Mint-UI 提供的现成的组件`lazy-load` 2. 根据`lazy-load`的使用文档,尝试使用 3. 渲染图片列表数据 ## 实现了图片列表的 懒加载改造 和 样式美化 ## 实现了点击图片 跳转到 图片详情页面 1.在改造li成router-link的时候,需要使用 `tag` 属性指定要渲染为哪种元素 ## 实现 详情页面的布局和美化,同时获取数据渲染页面 ## 实现图片详情中 缩略图 的功能 1. 使用 `缩略图插件vue-preview` 2. 获取到所有的图片列表,然后使用 v-for 指令渲染数据 3. 注意:img标签上的class不能去掉 4. 注意:每个图片数据对象中,必须有 w 和 h 属性 ## 绘制 商品列表页面基本结构并美化 ## 尝试在手机上 去进行项目的预览和测试 1. 要保证自己的手机可以正常运行; 2. 要保证 手机 和 开发项目的电脑 处于同一个WIF工环境中,也就是说 手机 可以访问到电脑的IP 3. 打开自己的项目中package.json文件,在 dev 脚本中,添加一个 --host 指令,把当前电脑的 WIFI IP地址,设置为 --host 的指令值; + 如何查看自己电脑所处 WIFI 的 IP 呢,在 cmd 终端中运行`ipconfig`,查看无线网的ip地址