基于Vue的WebApp项目开发(二)

利用webpack解析和打包.vue组件页面css

相关知识:html

vue项目中的每一个页面其实都是一个.vue的文件,这种文件,Vue称之为组件页面,必须借助于webpack的vue-loader才能运行,因此必须安装相关的包。前端

【注意】vue

从webpack2.0开始,在webpack.config.js中添加babel:{}是不认识的,须要在项目根目录下新建.babelrc文件,内容填写以下:node

{
  presets:['es2015'],
  //这句代码就是为了解决打包.vue文件不报错
  plugins:['transform-runtime']
}
View Code

 

好了,接下来看让一个Vue项目跑起来所须要的步骤:webpack

步骤一:须要安装如下几个包git

vue:vue.js核心包es6

vue-loader:.vue文件编译loadergithub

vue-template-compiler:.vue模板编译,被vue-loader所依赖web

babel-plugin-transform-runtime:es6实时转换成es5语法

安装vue相关的依赖包(--save-dev意思是将包安装到开发环境下)

 

接着安装vue核心包(--save意思将包安装到运行环境下)

最终package.json文件内容

{
  "name": "vue",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --inline --hot --open --port 5008"
  },
  "author": "fengxiong",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-es2015": "^6.24.1",
    "css-loader": "^0.28.7",
    "file-loader": "^1.1.6",
    "html-webpack-plugin": "^2.30.1",
    "less": "^2.7.3",
    "less-loader": "^4.0.5",
    "node-sass": "^4.7.2",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.19.1",
    "url-loader": "^0.6.2",
    "vue-loader": "^13.6.0",
    "vue-template-compiler": "^2.5.13",
    "webpack": "^3.10.0",
    "webpack-dev-server": "^2.9.7"
  },
  "dependencies": {
    "vue": "^2.5.13"
  }
}
View Code

步骤二:配置webpack.config.js文件

var htmlwp = require('html-webpack-plugin');

module.exports = {
  //指定打包的入口文件
  entry: './src/main.js',
  output: {
    //指定输出路径
    path: __dirname + '/dist',
    //指定输出文件名
    filename: 'build.js'
  },
  module: {
    loaders: [{
        test: /\.css$/,
        loader: 'style-loader!css-loader'
      },
      {
        test: /\.scss$/,
        loader: 'style-loader!css-loader!sass-loader'
      },
      {
        test: /\.less$/,
        loader: 'style-loader!css-loader!less-loader'
      },
      {
        //url可能请求多个资源,因此未来在项目中经过url导入的资源都配置在这里
        test: /\.(png|jpg|gif|ttf)$/,
        loader: 'url-loader?limit=400000'
      },
      {
        //将当前项目中全部的.js文件都要进行es6转es操做
        test: /\.js$/,
        loader: 'babel-loader?presets[]=es2015',
        //node_modules中的全部.js文件不去转换,提升打包性能
        exclude: /node_modules/
      },
      {
        //解析.vue组件页面的文件
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    new htmlwp({
      title: '首页',
      filename: 'index.html',
      template: 'index.html'
    })
  ]
}
View Code

步骤三:删除src文件夹中的calc.js文件,修改main.js文件,修改index.html文件,在src文件夹中增长App.vue文件

main.js

// 1.0导入vue核心包
import Vue from 'vue';

//2.0 导入App.vue的vue对象
import App from './App.vue';

// 3.0利用Vue对象进行解析渲染
new Vue({
    el:'#app',
    //render:function(create){create(App)} //es5的写法
    render:c=>c(App)  //es6写法
})
View Code
index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title></title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>
View Code
App.vue

<!--之后项目的根组件-->
<template>
  <!--1.0 template主要是存放html元素(页面结构)-->
  <span>{{msg}}</span>
</template>

<script>
  // 2.0负责导出.vue这个组件对象,它本质上是一个Vue对象
  // 因此Vue中该定义的元素均可以使用
  export default {
    data() { //等价于es5的data:function(){}
      return {
        msg: 'hello vue'
      }
    },
    methods: {

    },
    created() {

    }
  }
</script>

<style scoped>
  /* 3.0当前页面的CSS样式写到这里,其中scoped表示这个里面
      写的CSS代码知识在当前组件页面上有效,不会影响到其余组件页面
     * */
</style>
View Code

 此时项目结构为:

 步骤四:命令行运行npm run dev

 

项目中使用的ECMAScript6语法总结

一、对象的写法

es5中对象:{add:add,substrict:substrict}

es6中对象:{add,substrict}  注意这种写法的属性名称和值变量是同一个名称才能够简写

App.vue

<!--之后项目的根组件-->
<template>
  <div>
    <!--1.0 template主要是存放html元素(页面结构)-->
    <span>{{msg}}</span>
    <button @click="add(3,1)">add</button>
  </div>
</template>

<script>
  // 2.0负责导出.vue这个组件对象,它本质上是一个Vue对象
  // 因此Vue中该定义的元素均可以使用
  function add(x, y) {
    console.log(x + y)
  }
  export default {
    data() {
      return {
        msg: 'hello vue'
      }
    },
    methods: {
      //add:add  //es5写法
      add //es6写法
    },
    created() {

    }
  }
</script>

<style scoped>
  /* 3.0当前页面的CSS样式写到这里,其中scoped表示这个里面
      写的CSS代码知识在当前组件页面上有效,不会影响到其余组件页面
     * */
  }
</style>
View Code

二、在对象中方法的写法

es5:{add:function(){},substrict:function(){} }

es6:{add:(){},substrict(){} }

<!--之后项目的根组件-->
<template>
  <div>
    <!--1.0 template主要是存放html元素(页面结构)-->
    <span>{{msg}}</span>
    <button @click="add(3,1)">add</button>
  </div>
</template>

<script>
  function add(x, y) {
    console.log(x + y)
  }
  export default {
    data() { //等价于es5的data:function(){}
      return {
        msg: 'hello vue'
      }
    },
    methods: {
      //add:add  //es5写法
      add //es6写法
    },
    created() {

    }
  }
</script>

<style>

</style>
View Code

三、对象的导出写法

es5:module.exports = function(){};或者exprots.add = function(){};

es6:export default{ add(){} };或者export function add(){}

<!--之后项目的根组件-->
<template>
  <div>
    <!--1.0 template主要是存放html元素(页面结构)-->
    <span>{{msg}}</span>
    <button @click="add(3,1)">add</button>
  </div>
</template>

<script>
  function add(x, y) {
    console.log(x + y)
  }
  //module.exports = { //es5导出对象的写法
  export default { //es6导出对象的写法
    data() { //等价于es5的data:function(){}
      return {
        msg: 'hello vue'
      }
    },
    methods: {
      //add:add  //es5写法
      add //es6写法
    },
    created() {

    }
  }
</script>

<style>

</style>
View Code

四、对象的导入

es5:var add = require('./calc.js');

es6:若是导出的是export default { add(){} },那么能够经过import obj from './calc.js'

        若是导出的是export function add(){};export const PI = 3.15,那么能够经过按需加载import { add,PI } from './calc.js' 

calc.js

function add(x, y) {
  console.log(x + y);
}

function substrict() {
  console.log(x - y);
}

export default {
  add,
  substrict
}
View Code
App.vue

<!--之后项目的根组件-->
<template>
  <div>
    <!--1.0 template主要是存放html元素(页面结构)-->
    <span>{{msg}}</span>
    <button @click="newadd(3,1)">add</button>
  </div>
</template>

<script>
  import calc from './calc.js';
  export default { //es6导出对象的写法
    data() { //等价于es5的data:function(){}
      return {
        msg: 'hello vue'
      }
    },
    methods: {
      //add:add  //es5写法
      add, //es6写法
      newadd:calc.add,
      substrict:calc.substrict
    },
    created() {

    }
  }
</script>

<style>

</style>
View Code

 

使用路由(vue-router)实现单页面应用(SPA)开发

单页面应用,即在一个页面集成系统中全部功能,整个应用只有一个页面。由于路由的控制在前端,单页面应用在页面切换时比传统页面更快,从而在前端体验更好。下面请看SPA应用开发的基础过程。

步骤一:安装vue-router

步骤二:增长login.vue、register.vue和修改App.vue

login.vue

<template>
  <div>
    <h3>登陆组件</h3>
  </div>
</template>

<script>
  export default {

  }
</script>

<style>

</style>
View Code
register.vue

<template>
  <div>
    <h3>注册组件</h3>
  </div>
</template>

<script>
  export default {

  }
</script>

<style>

</style>
View Code
App.vue

<!--之后项目的根组件-->
<template>
  <div>
    <router-link to="/login">登陆</router-link>
    <router-link to="/register">注册</router-link>
    <!--路由占位符-->
    <router-view></router-view>
  </div>
</template>

<script>
  export default { 
    data() { 
      return {

      }
    },
    methods: {

    },
    created() {

    }
  }
</script>

<style>

</style>
View Code

步骤三:配置入口文件

main.js

// 1.0导入vue核心包
import Vue from 'vue';

//2.0 导入App.vue的vue对象
import App from './App.vue';

//3.0 导入vue-router
import vueRouter from 'vue-router';

//3.0.1将vueRouter对象绑定到Vue对象上
Vue.use(vueRouter);

//3.0.2导入路由规则对应的组件对象
import login from './components/account/login.vue';
import register from './components/account/register.vue';

//3.0.3定义路由规则
var router1 = new vueRouter({
    routes:[
        {path:'/login',component:login},
        {path:'/register',component:register}
    ]
});

// 4.0利用Vue对象进行解析渲染
new Vue({
    el:'#app',
    //使用路由对象实例
    router:router1,
    render:c=>c(App)  //es6写法
})
View Code

 

基于Vue.js的组件库——Mint-ui

Mint-ui 包含丰富的 CSS 和 JS 组件,可以知足平常的移动端开发须要。经过它,能够快速构建出风格统一的页面,提高开发效率。真正意义上的按需加载组件。能够只加载声明过的组件及其样式文件,无需再纠结文件体积过大。下面咱们一块儿看看具体的使用步骤

步骤一:安装mint-ui

步骤二:配置入口文件

main.js

//1.0导入vue核心包
import Vue from 'vue';

//2.0 导入App.vue的vue对象
import App from './App.vue';

//3.0 导入vue-router
import vueRouter from 'vue-router';

//3.0.1将vueRouter对象绑定到Vue对象上
Vue.use(vueRouter);

//3.0.2导入路由规则对应的组件对象
import login from './components/account/login.vue';
import register from './components/account/register.vue';

//3.0.3定义路由规则
var router1 = new vueRouter({
  routes: [{
      path: '/login',
      component: login
    },
    {
      path: '/register',
      component: register
    }
  ]
});

//4.0注册mint-ui
//导入mint-ui的css文件
import 'mint-ui/lib/style.min.css';
//导入mint-ui组件对象
import mintui from 'mint-ui';
//在Vue中全局使用mintui
Vue.use(mintui);

//5.0利用Vue对象进行解析渲染
new Vue({
  el: '#app',
  //使用路由对象实例
  router: router1,
  render: c => c(App) //es6写法
})
View Code

步骤三:配置根组件

App.vue

<!--之后项目的根组件-->
<template>
  <div>   
    <router-link to="/login">登陆</router-link>
    <router-link to="/register">注册</router-link>
    
    <!--路由占位符-->
    <router-view></router-view>
    
    <!--使用mint-ui中的button组件-->
    <mt-button type="primary" size="large" @click="tip">primary</mt-button>
  </div>
</template>

<script>
  //导入mint-ui的js模块
  import {Toast} from 'mint-ui';
  export default { 
    data() { 
      return {

      }
    },
    methods: {
      //使用mint-ui中的js
      tip:function(){
          Toast('hello');
      }
    },
    created() {

    }
  }
</script>

<style>

</style>
View Code

 

最接近原生APP体验的高性能前端框架——MUI

与mint-ui一样是款框架,那么问题来了,咱们须要这么多框架究竟是为了干嘛?实际上是由于想要的组件在一个框架上并无,本身又技术水平又渣,没办法开发出来,因此只好寻找另外一个框架来结合使用。好了,废话很少说,下面请看使用步骤

步骤一:进入官网,点击右上角的github地址,将源代码下载到本地,而后将mui源代码的dist文件夹下的三个文件复制到vue项目中

【注意】

当编译出错的时候,要将mui->css->mui.css文件中url里的单引号改成双引号)

步骤二:配置入口文件

//1.0导入vue核心包
import Vue from 'vue';

//2.0 导入App.vue的vue对象
import App from './App.vue';

//3.0 导入vue-router
import vueRouter from 'vue-router';

//3.0.1将vueRouter对象绑定到Vue对象上
Vue.use(vueRouter);

//3.0.2导入路由规则对应的组件对象
import login from './components/account/login.vue';
import register from './components/account/register.vue';

//3.0.3定义路由规则
var router1 = new vueRouter({
  routes: [{
      path: '/login',
      component: login
    },
    {
      path: '/register',
      component: register
    }
  ]
});

//4.0注册mint-ui
//导入mint-ui的css文件
import 'mint-ui/lib/style.min.css';
//导入mint-ui组件对象
import mintui from 'mint-ui';
//在Vue中全局使用mintui
Vue.use(mintui);

//5.0注册mui的css样式
import '../static/mui/css/mui.css';

//6.0利用Vue对象进行解析渲染
new Vue({
  el: '#app',
  //使用路由对象实例
  router: router1,
  render: c => c(App) //es6写法
})
View Code

步骤三:九宫格示例(App.vue)

<!--之后项目的根组件-->
<template>
  <div>
    <router-link to="/login">登陆</router-link>
    <router-link to="/register">注册</router-link>

    <!--路由占位符-->
    <router-view></router-view>

    <!--使用mint-ui中的button组件-->
    <mt-button type="primary" size="large" @click="tip">primary</mt-button>

    <!--使用mui中九宫格的样式-->
    <div class="mui-content">
      <ul class="mui-table-view mui-grid-view mui-grid-9">
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3">
          <a href="#">
            <span class="mui-icon mui-icon-home"></span>
            <div class="mui-media-body">Home</div>
          </a>
        </li>
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3">
          <a href="#">
            <span class="mui-icon mui-icon-email"><span class="mui-badge">5</span></span>
            <div class="mui-media-body">Email</div>
          </a>
        </li>
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3">
          <a href="#">
            <span class="mui-icon mui-icon-chatbubble"></span>
            <div class="mui-media-body">Chat</div>
          </a>
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
  //导入mint-ui的js模块
  import { Toast } from 'mint-ui';

  export default {
    data() {
      return {

      }
    },
    methods: {
      //使用mint-ui中的js
      tip: function() {
        Toast('hello');
      }
    },
    created() {

    }
  }
</script>

<style>

</style>
View Code
相关文章
相关标签/搜索