vue饿了么填坑笔记

记录学习 饿了么项目 vue遇到的坑

当然环境:WebStorm 2018.1.5 x64

-----------------------------------------------------------------

安装编译器跟破解,参考:点击打开链接

webstorm 快捷键,参考:点击打开链接

Vue Devtools工具,参考:点击打开链接

-----------------------------------------------------------------

chrome浏览器 没有 Resources 标签

-----------------------------------------------------------------

es 6添加语法检查 报错


 
 
  1. < template>
  2. < div>
  3. </ div>
  4. </ template>
  5. < script type=" text/ ecmascript-6">
  6. export default {
  7. };
  8. </ script>
  9. < style lang=" stylus" rel=" stylesheet/ stylus">
  10. </ style>

打开项目目录

npm install stylus 
 
 

npm install stylus-loader
 
 

 

-----------------------------------------------------------------

 

最新Vue  dev-server.js 不存在,替换成了webpack-dev-conf.js

 

webpack.dev.conf.js  文件下添加


 
 
  1. const FriendlyErrorsPlugin = require( 'friendly-errors-webpack-plugin')
  2. const portfinder = require( 'portfinder')
  3. //添加↓-------------------------↓
  4. const express = require( 'express')
  5. const app = express() //请求server
  6. var appData = require( '../data.json') //加载本地数据文件
  7. var seller = appData.seller //获取对应的本地数据
  8. var goods = appData.goods
  9. var ratings = appData.ratings
  10. var apiRoutes = express.Router()
  11. app.use( '/api', apiRoutes) //通过路由请求数据

webpack.dev.conf.js 文件下的 ->devWebpackConfig 方法


 
 
  1. publicPath: config.dev.assetsPublicPath,
  2. proxy: config.dev.proxyTable,
  3. quiet: true, // necessary for FriendlyErrorsPlugin
  4. watchOptions: {
  5. poll: config.dev.poll,
  6. },
  7. //添加↓-------------------------↓
  8. before(app) {
  9. app.get( '/api/seller', (req, res) => {
  10. res.json({
  11. errno: 0,
  12. data: seller
  13. }) //接口返回json数据,上面配置的数据seller就赋值给data请求后调用
  14. }),
  15. app.get( '/api/goods', (req, res) => {
  16. res.json({
  17. errno: 0,
  18. data: goods
  19. })
  20. }),
  21. app.get( '/api/ratings', (req, res) => {
  22. res.json({
  23. errno: 0,
  24. data: ratings
  25. })
  26. })
  27. }

 

-----------------------------------------------------------------

 

localhost换成的IP地址访问失败

ipconfig/all
 
 

 

 

-----------------------------------------------------------------

Vue-router 使用

使用到的文件

goods.Vue


 
 
  1. <template>
  2. <div> 123</div>
  3. </template>
  4. <script type= "text/ecmascript-6">
  5. export default {};
  6. </script>
  7. <style lang= "stylus" rel= "stylesheet/stylus">
  8. </style>

App.Vue


 
 
  1. <template>
  2. <div>
  3. <div class= "tab">
  4. <div class= "tab-item">
  5. <!-- 使用 router-link 组件来导航. -->
  6. <!-- 通过传入 `to` 属性指定链接. -->
  7. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
  8. <router-link to= "/goods">商品</router-link>
  9. </div>
  10. </div>
  11. <!-- 通过 view 刷新-->
  12. <router-view></router-view>
  13. </div>
  14. </template>
  15. <script type= "text/ecmascript-6">
  16. export default {};
  17. </script>
  18. <style lang= "stylus" rel= "stylesheet/stylus">
  19. </style>

router.js


 
 
  1. import Vue from "vue";
  2. import VueRouter from "vue-router";
  3. // 引入组件
  4. import goods from "../components/goods/goods";
  5. // 要告诉 vue 使用 vueRouter
  6. Vue.use(VueRouter);
  7. //定义路由
  8. const routes = [
  9. {
  10. path: "/goods",
  11. component: goods
  12. },
  13. {
  14. path: '/',
  15. redirect: '/goods'
  16. }
  17. ]
  18. //创建实例
  19. var router = new VueRouter({
  20. routes
  21. })
  22. export default router;

 

main.js

 


 
 
  1. import Vue from 'vue';
  2. import App from './App';
  3. import router from "./router/router.js"
  4. new Vue({
  5. el: '#app',
  6. components: { App },
  7. template: '<App/>',
  8. router, // 注入到根实例中
  9. render: h => h(App)
  10. });

-----------------------------------------------------------------

router-link标签 设置属性


 
 
  1. <style lang= "stylus" rel= "stylesheet/stylus">
  2. .tab
  3. /*样式*/
  4. display: flex
  5. /*宽*/
  6. widt: 100%
  7. /*高*/
  8. height: 40px
  9. line-height: 40px
  10. border-bottom: 1px solid rgba( 7, 17, 27, 0.1)
  11. .tab-item
  12. flex: 1
  13. /*居中*/
  14. text-align center
  15. /*↓------------Vue-router 属性设置↓------------*/
  16. /*路由点击颜色*/
  17. a.router-link-active {
  18. color: red
  19. }
  20. /*router-link 会默认 被渲染成 <a> 标签 (&作为父类 > 下的 a 标签)*/
  21. & > a
  22. /*样式*/
  23. display: block
  24. /*字体大小*/
  25. font-size: 14px
  26. /*颜色*/
  27. color: rgb( 77, 85, 93)
  28. router-link-active {
  29. color: red;
  30. }
  31. < /style>

-----------------------------------------------------------------

import 引用报错


 
 
  1. This relative module was not found:
  2. * ../components/star/star in ./node_modules/babel-loader/lib!.
  3. /node_modules/vue-loader/lib/selector.js ?type=script&index=0!./src/components/yy/yy.vue
?type=script&index=0!./src/components/yy/yy.vue

请注意使用

./ 或者 ../

src->
  component->
    xx->
      xx.Vue
    yy->
      yy.Vue
 

yy.Vue 需要引用 xx.Vue组件(跨文件引用文件)


 
 
  1. import xx from 'components/xx'; 错误
  2. import xx from './components/xx'; 错误
  3. import xx from '../components/xx'; 错误
  4. import xx from '../../components/xx'; 正确

-------------------------------------------------------------------------------------------------------

Vue 1.0 与 Vue 2.0 

v-for index 找不到 提示错误

Property or method "$index" is not defined on the instance but referenced during render. 

修改编写方式


 
 
  1. <li class="vue1.0" v-for="item in list">                
  2. <li class="vue2.0" v-for="(item, index) in list">

-------------------------------------------------------------------------------------------------------

transition

<div transition="fade"></div> vue 2.0 之后改为 

<transition name="fade">

    <div></div>

</transition>

-------------------------------------------------------------------------------------------------------

v-el:xx 替换成 ref="xx"


 
 
  1. <div class= "foods-wrapper" v-el:foods-wrapper> </div>
  2. <div class= "menu-wrapper" v-el:menu-wrapper> </div>
  3. methods: {
  4. //滚动方法
  5. _initScroll(){
  6. this.meunScroll = new BScroll( this.$els.menuWrapper, {});
  7. this.foodsScroll = new BScroll( this.$els.foodsWrapper, {});
  8. }
  9. }

替换成以下


 
 
  1. <div class= "foods-wrapper" ref= "foodsWrapper"> </div>
  2. <div class= "menu-wrapper" ref= "menuWrapper"> </div>
  3. methods:{
  4.     //滚动方法
  5.    _initScroll(){
  6.       this.meunScroll = new BScroll( this.$refs.menuWrapper, {});
  7.       this.foodsScroll = new BScroll( this.$refs.foodsWrapper, {});
  8.    }
  9. }

 

-------------------------------------------------------------------------------------------------------

 

transition动画无效

cartcontrol .vue文件下的 动画无效,在减号外面加一个标签 <transition>


 
 
  1. <!--外层动画-->
  2. <transition name="move">
  3. <div class="cart-decrease" v-show="food.count>0" @click="decreaseCart">
  4. <span class="inner icon-remove_circle_outline"> </span>
  5. </div>
  6. </transition>

-------------------------------------------------------------------------------------------------------

购物车小球抛物线

shopcart.Vue


 
 
  1. <!--vue1.0-->
  2. <div class="ball-container">
  3. <div transition="drop" v-for="ball in balls" v-show="ball.show" class="ball">
  4. <div class="inner inner-hook"> </div>
  5. </div>
  6. </div>

 
 
  1. <!--vue2.0 抛物线小球-->
  2. <div class="ball-container">
  3. <div v-for="ball in balls">
  4. <transition name="drop" @before-enter="beforeDrop" @enter="dropping" @after-enter="afterDrop">
  5. <div class="ball" v-show="ball.show">
  6. <div class="inner inner-hook"> </div>
  7. </div>
  8. </transition>
  9. </div>
  10. </div>

-------------------------------------------------------------------------------------------------------

在WebView 中,使用 Vuex的 swiper 滚动图片控件时,mounted更新数据时有一定几率没有及时重绘视图。导致 swiper 控件布局显示空。

解决方案:

<swiper v-show="property_splicing !== null" loop :list="data" style="height: 156px"></swiper>
初始化数据的时候不要把 data 设置为空。应该设置一条出错的数据。
data: [] 
data: [{img: 'http://placeholder.qiniudn.com/800x300/FF3B3B/ffffff', url: '', title: ''}]

-------------------------------------------------------------------------------------------------------

学习的时候疯狂踩坑,希望能帮到各位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值