Vue+webpack 构建前端页面初探

前言:本文适合后端同学快速了解基于vue的前端开发

Vue

学习成本:一周
Vue是一个js框架,承担和dom交互的职责,使开发人员在写js的时候,不用再去获取dom的对象并修改dom属性值,js写起来有点面向对象的感觉,对于后端研发来说相当好用。
官网:https://cn.vuejs.org

用Vue构建一个简单的计算器

简单实现一个可以加减乘除的计算器,并以这个实例介绍Vue基本用法


计算器目标效果图

以上的js代码,Vue对象里声明了计算器需要的属性和方法
Vue里面可以声明对象属性,方法,生命周期函数等,需要分别写在Vue对应的data、methods等属性中

  • el: 声明绑定哪个html标签
  • data: 声明属性的地方
  • methods: 声明方法的地方
  • 生命周期函数有beforeCreate created destroyed等,比如页面初始化需要加载数据,则可以使用created

计算器的方法、属性在js里声明好了,接下来要做的就是把方法和属性分别和html标签绑定起来


=

以上是html代码,把整段代码运行起来就能实现计算器效果。
关于如何绑定方法属性的说明:

  • v-model: 把input的value和vue的属性绑定起来,vue对象里的值和input标签里的值会相互同步更新
  • v-on: 把vue的methods里的方法和dom上的事件绑定起来, 简写用'@'表示,@click
  • v-bind: 把dom里的attribute和vue里的属性绑定起来,简写使用':'表示, :key, :total

使用vue实现交互式逻辑,js代码比较简洁,只需专注其逻辑实现,dom的操作由vue自动完成

Vue组件

组件就是封装一个可以复用的模块,比如实现一个分页的组件,其他页面可以复用.
下面通过伪码实现一个分页组件


用伪码实现一个分页组件,在app2中注册了一个名为pagination的组件,并在html中使用了组件。

  • components是vue注册组件的属性
  • pagination组件的currentPage total pageSize 几个属性声明在了 props里,因为需要父组件向该组件传值,所以申明在props里才能接收到父组件传的值。(父组件通过v-bind的绑定attribute传值)
  • 给组件传递currentPage的值的时候,:current-page.sync多了个sync后缀,表示子组件的值更新后,同步到父组件(正常情况下子组件内部的值更新后,不会同步更新父组件的值)
  • clickCur()里有一段代码 this.$emit("currentPageChange"), 这段代码意思是触发父组件上绑定的currentPageChange事件,Vue通过this.$emit("")这种方法通知父组件一些事件
  • v-for 意思是遍历一个集合,列表渲染指令

我们后端程序员写的页面一般不会太复杂,开发复用组件的情况比较少,更多的是使用别人开源出来的组件,了解组件间传值,属性同步,方法回调的实现还是很有必要。

单页面应用路由问题

学习成本:0.5天
单页面应用简单的说就是html里的页面一次加载出来,后续页面跳转都在页面内进行,除了数据需要从服务端加载,其他页面都是在页面内跳转,不再请求服务器,典型的url写法: /home/#/page1,页面间跳转使用#分割。详细介绍请自行查阅资料。

使用Vue会涉及到多个页面之间跳转如何在单页面内路由问题,即组件之间跳转问题,vue的路由使用Vue Router实现,参考https://router.vuejs.org/zh/。

组件之间状态同步问题

多个组件之间涉及状态同步,比如左边菜单组件和页面上方标签组件之间状态同步问题,实现类库参考https://vuex.vuejs.org/zh/

Vue相关生态

  • 使用Vue之后,我们在项目中不再引入jquery的库,所以原来使用$.ajax不能再使用,XMLHttpRequest请求的类库推荐:
    vue-resource: https://github.com/pagekit/vue-resource
    axios: https://github.com/axios/axios

  • vue只是一个js框架,独木难支,实际开发中还是需要使用基于vue的开源前端框架才行,推荐饿了么开源的类库https://element.eleme.cn/#/zh-CN/component/installation, 这个库相当好用,基本项目中需要的组件实现基本都能找到

  • 基于vue的后台模板推荐: https://github.com/lin-xin/vue-manage-system, 这个开源实现也不错,把整个前端架子都搭好了,只需删除里面多余的demo页面,并增加我们自己的新页面就行

NPM的使用

学习成本:无

Vue 可以直接在页面通过标签引用,不过这种方式现在有点low了,就好比在java项目中,对依赖的jar包,还人工下载相应版本,然后copy到lib目录下一样。

使用NPM可以对依赖的包通过命令安装管理,npm依赖NodeJs环境,到官网下载一个NodeJs安装之后就可以使用npm命令。相关教程自行查阅。
常见命令:
npm install + packageName安装包
npm init初始化项目信息(创建一个package.json文件)

npm类似于java的maven,在项目根目录下创建一个pakage.json(类似pom.xml)文件,里面声明上项目信息和依赖哪些包,然后别人拿到项目之后,再npm install一下就能把所有依赖的包都下载到本地环境;另外当运行npm install+包名 安装依赖时,也会自动在pakage.json里加入这个包的依赖信息。注意在这个json文件里不能加注释,会报错

{
  "name": "speech-test-html",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "ajv": "^6.7.0",
    "element-ui": "^2.4.5",
    "file-saver": "^2.0.0",
    "less": "^3.9.0",
    "semantic-ui-icon": "^2.3.3",
    "vue": "^2.5.21"
  },
  "devDependencies": {
    "@types/file-saver": "^2.0.0",
    "@vue/cli-plugin-babel": "^3.3.0",
    "@vue/cli-plugin-eslint": "^3.3.0",
    "@vue/cli-service": "^3.3.0",
    "babel-eslint": "^10.0.1",
    "copy-webpack-plugin": "^4.6.0",
    "eslint": "^5.8.0",
    "eslint-plugin-vue": "^5.0.0",
    "less-loader": "^4.1.0",
    "semantic-ui-less": "^2.4.1",
    "vue-cli-plugin-element": "^1.0.1",
    "vue-resource": "^1.5.1",
    "vue-router": "^3.0.2",
    "vue-template-compiler": "^2.5.21"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "rules": {
      "no-console": "off"
    },
    "parserOptions": {
      "parser": "babel-eslint"
    }
  },
  "postcss": {
    "plugins": {
      "autoprefixer": {}
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}

使用npm安装完一个包后,在js文件里可以通过require引用这个包,也可以用import引用
注意: require是nodejs的命令,import是ECMAScript 6的语法

webpack的使用

学习成本:1天
webpack也需要通过npm安装,这个工具的作用就是把项目里的各种html js css依赖文件编译到一个文件里,并进行压缩,缩小静态文件体积,可以减少浏览器加载html的时候发起的请求,加载速度要快一点。另外在使用第三方库的时候,可以按需引入相关组件
官网地址: https://www.webpackjs.com/guides/
webpack 其实就是一个集成了解析html css js 等文件的工具,也就是各种loader,比如css-loader vue-loader babel-loader,这些loader都需要使用npm 安装,然后需要在webpack.config.js里配置各种文件应该使用什么loader加载,怎么加载,还有webpack把项目资源都打包完的压缩文件放在哪个目录。这些配置一般都比较固定,没有特殊需求基本就是模板代码。

const {VueLoaderPlugin} = require('vue-loader')

module.exports = {
    entry: __dirname + "/src/main.js",
    mode: "development",
    output: {
        path: __dirname + '/dist',
        filename: "bundle.js"
    },
    module: {
        rules: [
            {test: /\.vue$/, use: ['vue-loader']},
            {test: /\.css$/, use: ['style-loader', 'css-loader']},
            {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env'],
                        plugins: ['@babel/plugin-transform-runtime', "@babel/plugin-proposal-class-properties"]
                    }
                }
            }
        ]
    },
    resolve: {
        alias: {
            'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 时需用 'vue/dist/vue.common.js'
        }
    },
    plugins: [
        // make sure to include the plugin for the magic
        new VueLoaderPlugin()

    ]

};

webpack-dev-server

使用webpack后必须要使用的一个热加载插件,实现html css js更改后浏览器可以实时刷新出内容,不用人工去点刷新
使用参考官网:https://webpack.docschina.org/guides/development/#%E4%BD%BF%E7%94%A8-webpack-dev-server
这个服务会使用nodejs启动一个http服务,我们访问这个服务地址去查看编写的代码效果

vue-cli脚手架使用

学习成本:0.5小时
看到这里有没有感觉除了vue,其他要学习的东西也挺多,心里发慌!
不过不用怕,vue-cli就是一个类似于java里的springboot,使用vue-cli之后,可以直接初始化出一个vue开发环境出来,把以上关于webpack 和 webpack-dev-server的配置都搞好了,如果没有什么特殊需求,基本不用再去改配置!
参考官网:https://cli.vuejs.org/
https://github.com/lin-xin/vue-manage-system这个开源模板也是基于vue-cli的,可以参考下这个项目的使用就能get到这个脚手架怎么用

你可能感兴趣的:(Vue+webpack 构建前端页面初探)