Vue填坑

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

当然环境:WebStorm 2018.1.5 x64

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

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

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

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

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

chrome浏览器 没有 Resources 标签

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

es 6添加语法检查 报错

<template>
  <div>
  </div>
</template>

<script type="text/ecmascript-6">
  export default {
  };
</script>

<style lang="stylus" rel="stylesheet/stylus">

</style>

打开项目目录

npm install stylus 

npm install stylus-loader

 

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

 

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

 

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

const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')

//添加↓-------------------------↓
const express = require('express')
const app = express()//请求server
var appData = require('../data.json')//加载本地数据文件
var seller = appData.seller//获取对应的本地数据
var goods = appData.goods
var ratings = appData.ratings
var apiRoutes = express.Router()
app.use('/api', apiRoutes)//通过路由请求数据

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

    publicPath: config.dev.assetsPublicPath,
    proxy: config.dev.proxyTable,
    quiet: true, // necessary for FriendlyErrorsPlugin
    watchOptions: {
      poll: config.dev.poll,
    },
    //添加↓-------------------------↓
    before(app) {
      app.get('/api/seller', (req, res) => {
        res.json({
          errno: 0,
          data: seller
        })//接口返回json数据,上面配置的数据seller就赋值给data请求后调用
      }),
        app.get('/api/goods', (req, res) => {
          res.json({
            errno: 0,
            data: goods
          })
        }),
        app.get('/api/ratings', (req, res) => {
          res.json({
            errno: 0,
            data: ratings
          })
        })
    }

 

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

 

localhost换成的IP地址访问失败

ipconfig/all

 

 

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

Vue-router 使用

使用到的文件

goods.Vue

<template>
  <div>123</div>
</template>

<script type="text/ecmascript-6">
  export default {};
</script>

<style lang="stylus" rel="stylesheet/stylus">
</style>

App.Vue

<template>
  <div>
    <div class="tab">
      <div class="tab-item">
        <!-- 使用 router-link 组件来导航. -->
        <!-- 通过传入 `to` 属性指定链接. -->
        <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
        <router-link to="/goods">商品</router-link>
      </div>
    </div>

	<!-- 通过 view 刷新-->
    <router-view></router-view>
  </div>
</template>

<script type="text/ecmascript-6">
  export default {};
</script>

<style lang="stylus" rel="stylesheet/stylus">
</style>

router.js

import Vue from "vue";
import VueRouter from "vue-router";

// 引入组件
import goods from "../components/goods/goods";

// 要告诉 vue 使用 vueRouter
Vue.use(VueRouter);

//定义路由
const routes = [
  {
    path:"/goods",
    component: goods
  },
  {
    path: '/',
    redirect: '/goods'
  }
]

//创建实例
var router =  new VueRouter({
  routes
})
export default router;

 

main.js

 

import Vue from 'vue';
import App from './App';

import router from "./router/router.js"

new Vue({
  el: '#app',
  components: { App },
  template: '<App/>',
  router,  // 注入到根实例中
  render: h => h(App)
});

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

router-link标签 设置属性

<style lang="stylus" rel="stylesheet/stylus">
  .tab
    /*样式*/
    display: flex
    /*宽*/
    widt: 100%
    /*高*/
    height: 40px
    line-height: 40px
    border-bottom: 1px solid rgba(7, 17, 27, 0.1)
    .tab-item
      flex: 1
      /*居中*/
      text-align center
	  
	  /*↓------------Vue-router 属性设置↓------------*/
      /*路由点击颜色*/
      a.router-link-active {
        color: red
      }
      /*router-link 会默认 被渲染成 <a> 标签 (&作为父类 > 下的 a 标签)*/
      & > a
        /*样式*/
        display: block
        /*字体大小*/
        font-size: 14px
        /*颜色*/
        color: rgb(77, 85, 93)
        router-link-active {
          color: red;
        }
</style>

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

import 引用报错

This relative module was not found:

* ../components/star/star in ./node_modules/babel-loader/lib!.
/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组件(跨文件引用文件)

import xx from 'components/xx';		错误
import xx from './components/xx';	错误
import xx from '../components/xx';	错误
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. 

修改编写方式

<li class="vue1.0" v-for="item in list">                
<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"

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

替换成以下

<div class="foods-wrapper" ref="foodsWrapper"></div>
<div class="menu-wrapper" ref="menuWrapper"></div>
methods:{
   //滚动方法
   _initScroll(){
      this.meunScroll = new BScroll(this.$refs.menuWrapper, {});
      this.foodsScroll = new BScroll(this.$refs.foodsWrapper, {});
   }
}

 

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

 

transition动画无效

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

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

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

购物车小球抛物线

shopcart.Vue

<!--vue1.0-->
    <div class="ball-container">
      <div transition="drop" v-for="ball in balls" v-show="ball.show" class="ball">
        <div class="inner inner-hook"></div>
      </div>
    </div>
<!--vue2.0 抛物线小球-->
    <div class="ball-container">
      <div v-for="ball in balls">
        <transition name="drop" @before-enter="beforeDrop" @enter="dropping" @after-enter="afterDrop">
          <div class="ball" v-show="ball.show">
            <div class="inner inner-hook"></div>
          </div>
        </transition>
      </div>
    </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、付费专栏及课程。

余额充值