美文网首页
前端项目开发<Vue>

前端项目开发<Vue>

作者: 玉圣 | 来源:发表于2018-06-16 15:52 被阅读80次

一、项目开发配置

1、项目搭建

1.1、项目安装:
1.2、项目结构:

2、框架引入:

2.1、css相关:
2.2、图标样式:
2.3、轮播图框架:
  • vue-awesome-swiper
    参考:链接一
    使用:
      //这里使用@的意思为安装指定的版本
      npm install vue-awesome-swiper@v2.6.7 --save
    
2.4、插件:
  • better-scroll :移动端滚动插件解决移动端各种滚动场景需求的开源插件,适用于滚动列表、选择器、轮播图、索引列表、开屏引导等应用场景。点击进入下载 better-scroll
    使用:
      //html
      <div class="wrapper" ref=“wrapper”>
        <ul class="content">
          <li>...</li>
          <li>...</li>
          ...
        </ul>
      <!-- you can put some other DOMs here, it won't affect the scrolling -->
      </div>
    
       //js
      import BScroll from 'better-scroll'
      const wrapper = document.querySelector('.wrapper')
      const scroll = new BScroll(wrapper)
    
      //或者:
      import BScroll from 'better-scroll'
      const scroll = new BScroll('.wrapper')
    
    注:在vue中,可以通过在元素上添加ref的语法来获取
      const scroll = new BScroll(this.$refs.wrapper)  //wrapper为自定义的名字,元素上ref中的值
    

二、项目开发代码

1、代码技巧

1.1、简写导入目录:

说明:在项目开发中,在一个js或css文件中如果导入其他目录下的相关文件,就需要通过如下方式,
示例:

<style>
    @import url('../../assets/style/fontStyle.css');
</style>

但如果每次都导入同一目录下的文件,会比较麻烦,就可以通过设置简写路径达到同样的导入效果
配置方法如下,其中key值为自定义的简写名称(如stylePath),value值为配置的路径
示例:

//在{项目目录}\build\webpack.dev.conf.js文件中
resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
      'stylePath': resolve('src/assets/styles'),  //在这里进行配置简写别名
    }
  },
//使用如下,这里使用了stylus的框架
<style lang="stylus" scoped>
    @import "~stylePath/border.styl"
</style>

2、Vuex的使用及注意点

2.1、Vuex的使用:
  • 显式安装Vuex:

      import Vue from 'vue'
      import Vuex from 'vuex'
    
      Vue.use(Vuex)
    

    注:当使用全局 script 标签引用 Vuex 时,不需要以上安装过程。

  • 创建store:

     // 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex)
    
     const store = new Vuex.Store({
       state: {
         count: 0
       },
       mutations: {
         increment (state) {
           state.count++
         }
       }
     })
    
       //触发状态变更
      //commit可接收多个参数,第一个参数(如increment)为方法名,第二个及之后的参数为方法(如increment)中接收的参数
       store.commit('increment') 
    
       console.log(store.state.count) // -> 1
    
  • 注入store:
    Vuex 通过 store 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 Vue.use(Vuex))

        const app = new Vue({
           el: '#app',
           // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
           store,
           components: { Counter },
           template: `
            <div class="app">
              <counter></counter>
            </div>
            `
         })
    

3、router-link 的使用技巧

3.1、使用:

在需要跳转的元素外包裹一层<router-link></router-link> ,使用to 语法即可跳转到指定的页面中

    <ul>
        <router-link to="/">
            <li>
                //....
            </li>
        </router-link>
    </ul>
3.2、技巧:

实际上,HTML会将router-link 渲染成<a> 标签
这就会导致被router-link 包裹的元素中的文字显示成<a> 默认的蓝色样式,可通过如下方式解决:

    <ul>
        <router-link
           tag="li"     
           to="/">
            //....
        </router-link>
    </ul>

使用tag将router-link 标记为li 标签,这样既保证了ul 中的子元素为li ,又保证了html在渲染的时候,不会讲router-link 渲染为a 标签

4、页面数据的缓存

4.1、使用:keep-alive

如果某一页面多次被访问,并且其中的数据基本保持不变,则可以使用页面缓存的技术:

    <keep-alive>
        <router-view/>
    </keep-alive>

注:当页面被缓存后,生命周期钩子mounted 方法则只会在第一次进入的时候,执行一次,就不会再执行了。但生命周期钩子方法activated 方法会每次调用

4.2、缓存数据的刷新:

但如果页面的数据根据传过来的参数来判定是否需要缓存和刷新数据,则可以通过生命周期的钩子activated 来实现数据的刷新

        mounted: {
            //首次进入,刷新数据
        },
        activated: {
            //再次进入,根据传入参数判断是否需要再次刷新数据
            if(lastFlag===this.flag) {
                //重新刷新数据
            }
        }
4.3、隔离某些页面的缓存:

如果通过keep-alive 进行页面的缓存,会将其包裹下的路由子页面都会被缓存,假如其中的某一子页面不需要被缓存,则可以通过exclude 语法将不需要缓存的页面隔离出去,保证其每次都会重新加载请求:

    <keep-alive exclude="Detail">
        <router-view/>
    </keep-alive>

注:

  • 其中的Detail为指定的路由页面,文件名称:Detail.vue
  • 则每次进入页面,生命周期钩子函数mounted 都会被重新执行

5、多页面的拖动影响

5.1、问题说明:

当在一个页面拖动到底部的某个位置的时候,再点击其中的一个元素进入到下一个页面,则进入的这个页面也会被拖到相同的位置,这就造成了多页面的拖动影响

5.2、解决办法:

在路由配置中,加入一项scrollBescrollBehavior ,即每次进行路由切换的时候,让页面的初始位置为指定的x和y值

    export default new Router({
        routes: [{
            path: "/",  //根路径
            name: "Home",   //名称
            component: Home //组件名称
        }, {
            path: "/city",  //指定路径
            name: "City",
            component: City
        }
        //....
        ],
        scrollBehavior (to, from, savedPosotion) {
            return { x: 0, y:0 }
        }
    });

6、页面支持IP访问

6.1、问题说明:

前端项目通过webpage 启动的,它不支持IP的形式进行页面访问,所以需要修改项目的默认配置项

6.2、解决方案:

在项目的根目录下的package.json文件中,进行如下配置:

"scripts": {
    "dev": "webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js",
    ......
  },

注:主页增加了--host 0.0.0.0

7、兼容性问题

7.1、问题说明:

在某些浏览器和手机上不支持一些es6和vue的新特性,就会出现兼容性的问题

7.1、解决方案:

通过使用第三方框架库babel-polyfill来解决兼容性问题

  • 安装:
    npm install babel-polyfill --save
  • 使用:
    重启姓名服务器,在项目中直接引入代码即可
       import "babel-polyfill"
    

参考文章:https://blog.csdn.net/crazyfeeling/article/details/70241285

8、项目打包上线

  • 路径配置:
    如果需要将打包好的文件放到指定的目录中进行访问,则需要进行相应的配置:
    找到index.js文件,在build配置项中,进行如下配置:

      build: {
        ......
        assetsPublicPath: '/project',
        ......
      {
    

    注:其中的project就是需要配置的路径

  • 打包编译(build):
    npm run build
    vue脚手架工具会自动的对src目录下的源代码进行打包编译,生产一个能够被浏览器运行的代码,同时这套代码也被压缩了的。运行之后,显示Build complete即成功完成编译,会生产一个dist目录,此目录即为要上线的文件

  • 部署到服务器后台
    将打包好的文件dist中的文件放到服务器上的指定目录中即可

9、异步组件的使用:

9.1、使用方式:
  • 常规组件的写法:
        import HomeHeader from './components/HomeHeader.vue'
        export default {
          ......
          components: {
             HomeHeader: HomeHeader,
          }
          ......
        }
    
  • 异步组件的写法:
        import HomeHeader from './components/HomeHeader.vue'
        export default {
            ......
            components: {
                HomeHeader: () => import('./components/HomeHeader.vue'),
            }
            ......
        }
    
9.2、注意事项:
  • 使用异步加载可以避免一次性将数据全部加载完成,造成加载量过大
  • 只有当项目很庞大,app.js达到至少1MB以上的时候,才有必要使用异步加载组件进行拆分

三、相关参考

1、项目开发参考

1.1、集成自定义的模板脚手架:

四、相关问题

1、发布项目遇到图片找不到情况:

1.1、问题描述:
  • 在使用npm run build进行webpack打包后,发布的项目可能会遇到图片等找不到的情况。
1.2、解决方案:
  • “万能”解决办法:
    • 将config/index.js 里面的 assetsPublicPath:'/' 改为 assetsPublicPath:'./'
    • build/util.js里面的
        if (options.extract) {
           return ExtractTextPlugin.extract({
                  use: loaders,
                  fallback: 'vue-style-loader',
                  publicPath:'/'
        })
    
    将其中的publicPath 改为:publicPath:'../../' 就可以了。这样打包出来的路径就是正确的了。

说明:

  • 第一个是为了改变js中引入图片的路径,改为./ 就是指在当前路径,这个. 代表的路径就是assetsRoot+assetsSubDictionary,这里定位到dist/static/ ,加上图片前缀img,就可以找到了。
  • 第二种是为了改变vue文件中使用style样式里面例如background:url('xxx'),这样的路径,因为style最终变成css文件在dist/static/css 里面,我们的图片放在dist/static/img 中,那么加上../../ 变成dist目录下,默认的目录前缀是static,img是图片默认前缀,这样就可以定位到图片。

相关文章

  • 前端项目开发<Vue>

    一、项目开发配置 1、项目搭建 1.1、项目安装: 1.2、项目结构: 2、框架引入: 2.1、css相关: re...

  • 前端开发项目

    也许哪天我会用上?我零基础独立开发一个 Web/Hybrid 项目的经历 - f_ms | painter (im...

  • 关于后台管理系统前端项目的思考

    关于后台管理系统前端项目的思考 开发后台管理系统是大部分前端开发人员接触过的项目,如何更好的进行项目的搭建、组件的...

  • 做前端开发,不灵活点怎么下早班?

    做前端开发,不灵活点怎么下早班? 对于开发者来说web前端,app前端,小程序前端都是折磨人的小妖精。 做项目要考...

  • 云公司 - jf项目 前端使用手册

    前端使用手册 前言 该文档的目的,是想要前端开发人员可以快速上手整个项目的开发。(会持续补充) 项目的基本目录结构...

  • 互联网项目管理流程

    项目角色 产品经理(PM) 后台开发(RD) 前端开发(FE) 系统测试(QA) 项目周期 主要的环节包括 :需求...

  • 几款常用的web前端框架推荐

    Web前端框架就是为了节约开发成本和时间,一般开发一个项目都会用到前端框架(除非自己有前端开发团队),根据我经验找...

  • 几款常用的高质量web前端框架,建议你收下!

    Web前端框架就是为了节约开发成本和时间,一般开发一个项目都会用到前端框架(除非自己有前端开发团队),根据我经验找...

  • 如何用pm2部署java全栈项目

    标题说的java全栈项目特指前端采用vue/react/angular等前端框架,后端采用java技术栈开发的项目...

  • Spring Boot整合Swagger2构建RESTful A

    开发中遇到的接口文档问题 在项目开发中一般分为前端UI开发和后端接口开发,前端通过调用后端的RESTful API...

网友评论

      本文标题:前端项目开发<Vue>

      本文链接:https://www.haomeiwen.com/subject/rvjbeftx.html