vue学习笔记

vue 开发环境介绍

npm(node包管理工具)

  1. 安装node,自带npm
  2. npm配置淘宝源镜像或者使用cnpm
    npm config set registry https://registry.npm.taobao.org
    npm install -g cnpm
  3. npm配置文件package.json
  4. 执行脚本script:
    npm install ->安装依赖模块
    npm start ->本地启动一个webpack-dev-server服务器,运行项目
    npm run build ->打包前端项目,生成静态html、css、js
    npm run test ->运行测试代码
  5. 依赖模块dependencies
// 一个常见的package.json文件
{
  "name": "vue-admin-template",
  "version": "3.6.0",
  "license": "MIT",
  "author": "Pan <panfree23@gmail.com>",
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js",
    "build:report": "npm_config_report=true node build/build.js",
    "lint": "eslint --ext .js,.vue src",
    "test": "npm run lint"
  },
  "dependencies": {
    "axios": "0.17.1",
    "element-ui": "2.3.4",
    "js-cookie": "2.2.0",
    "normalize.css": "7.0.0",
    "nprogress": "0.2.0",
    "vue": "2.5.10",
    "vue-router": "3.0.1",
    "vuex": "3.0.1",
    "echarts": "3.8.5"
  },
  "devDependencies": {
    "autoprefixer": "7.2.3",
    "babel-core": "6.26.0",
    "babel-eslint": "8.0.3"
  }
}

webpack(前端项目构建打包工具)

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
核心概念:一切皆模块

  1. entry 入口
    解析模块的入口,index.js
  2. output 输出
    打包文件输出路径
  3. loader 解析器
    使用指定loader处理对应资源模块,如图片,css,字体图标等,转化为js可读取的模块
  4. plugin 插件
    全局处理模块,如压缩js、代码分、抽取公用模块等
// 一个常见的`webpack`配置文件
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
        entry: __dirname + "/app/main.js", //已多次提及的唯一入口文件
        output: {
            path: __dirname + "/build",
            filename: "bundle-[hash].js"
        },
        devtool: 'none',
        devServer: {
            contentBase: "./public", //本地服务器所加载的页面所在的目录
            historyApiFallback: true, //不跳转
            inline: true,
            hot: true
        },
        module: {
            rules: [{
                    test: /(\.jsx|\.js)$/,
                    use: {
                        loader: "babel-loader"
                    },
                    exclude: /node_modules/
                }, {
                    test: /\.css$/,
                    use: ExtractTextPlugin.extract({
                        fallback: "style-loader",
                        use: [{
                            loader: "css-loader",
                            options: {
                                modules: true,
                                localIdentName: '[name]__[local]--[hash:base64:5]'
                            }
                        }, {
                            loader: "postcss-loader"
                        }],
                    })
                }
            }
        ]
    },
    plugins: [
        new webpack.BannerPlugin('版权所有,翻版必究'),
        new HtmlWebpackPlugin({
            template: __dirname + "/app/index.tmpl.html" //new 一个这个插件的实例,并传入相关的参数
        }),
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.optimize.UglifyJsPlugin(),
        new ExtractTextPlugin("style.css")
    ]
};

使用vue-cli脚手架快速搭建vue开发环境

  1. npm install -g vue-cli ->全局安装vue-cli脚手架
  2. vue init webpack vueTest->初始创建vue模板工程

vue 基础概念

指令

v-if->是否挂载元素,true时挂载并显示,false时不挂载到dom树中,类似display:node

<el-button v-if="status===true">启用</el-button>

v-show->是否显示元素,元素始终存在于dom树中,类似visibility:hidden
v-for->循环渲染数组中的元素

<li v-for="item in list"> {{ item.name }} </li>

v-model->给表单双向绑定一个值

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

v-on->元素设置监听响应事件,简写为@,如@click

<button v-on:click="counter += 1">Add 1</button>

组件生命周期

  1. created 初始化组件并创建完成
  2. mounted 组件挂载到真实dom中,通常在这个方法中加载异步数据
  3. beforeDestroy 组件卸载前触发,用于删除定时器或监听事件
vue组件生命周期

单文件组件(.vue)

  1. template
    组件的html渲染模板,最后被解析为html标签挂载到dom中,只能存在一个子根节点,通常最外层使用一个空div包裹
  2. script
    组件的js逻辑代码,默认导出一个对象,里面包括data,method,compted和生命周期等属性
  3. style
    组件内部的样式代码,使用scoped属性表示该样式类只作用于组件内部
<template>
  <div class="testStyle">
    <span>{{name}}</span>
    <button @click="handleClick">修改</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        name: 'zhangsan'
      }
    },
    methods: {
      handleClick() {
        console.log('onButtonClick')
      }
    }
  }
</script>

<style scoped>
.testStyle {
  background-color: #fff;
}
</style>

ElementUI 常用组件使用

栅格布局layout

容器tab、card、steps

表单form

表格table

弹窗dialog

组件常用样式规范

  1. table组件剩余一列不设置宽度,使其灵活伸缩。
        {
          text: '权限类型',
          value: 'funcClass',
          width: 160
        },
        {
          text: '备注',
          value: 'memo'
        }
  1. margin、padding通常设置为8*n的像素8px、16px、24px等,如按钮左右间距为8px,表单上下间距为16px,模块间距24px。
margin-left: 24px
  1. dialog组件弹窗宽度加宽时设置为800px或1000px,高度较高时top设置为20px。
<el-dialog :title="textMap[dialogStatus]" width="720px" top="20px">
</el-dialog>
  1. select组件设置宽度width:100%。
      <el-select size="medium" style="width:100%">
      </el-select>
  1. form 表单标签根据冒号对齐,label-position="right"。
<el-form label-position="right">
</el-form>

vuex状态管理及异步交互

单向数据流
vuex状态管理

参考资料

  1. es6语法
    es6基础语法
    https://www.jianshu.com/p/287e0bb867ae
    阮一峰es6教程
    http://es6.ruanyifeng.com
  2. webpack概念
    webpack入门
    https://segmentfault.com/a/1190000006178770
    webpack中文网
    https://www.webpackjs.com/guides/production
  3. npm中文文档
    npm中文网
    https://www.npmjs.com.cn/
  4. vue中文文档
    vue中文网
    https://cn.vuejs.org/v2/guide/
  5. vuex中文文档
    vuex中文网
    https://vuex.vuejs.org/zh/guide/
  6. vue-router中文文档
    vue-router中文网
    https://router.vuejs.org/zh/
  7. elementUI组件库
    elementUI官网
    http://element-cn.eleme.io/#/zh-CN/component/layout
  8. vue-cli使用及环境搭建
    vue-cli使用文档
    https://cli.vuejs.org/zh/guide/installation.html
    vue-cli教程
    https://blog.csdn.net/wulala_hei/article/details/80488674
  9. vue-admin模板项目文档
    vue-admin项目
    https://juejin.im/post/59097cd7a22b9d0065fb61d2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 个人基于对 Vuejs 的学习制作了一个 Todo 单页应用 Lightodo,功能包括:添加待办事项卡片,对卡片...
    AlessiaLi阅读 21,543评论 16 308
  • 01 你是不是经常遇到一个问题后茫然无措,不知该如何下手解决? 其实解决一个问题或者建立一个可执行方案,是有模型可...
    辉夜君阅读 1,428评论 0 10
  • 我疾步向前没有一句话,想早点赶回出租屋。F在后面默默的跟着,也不出声音。每向前一步都伴随着伤心和羞耻的眼泪...
    走走写信给你阅读 306评论 0 1
  • 雨后的清晨,推窗一看,远山云雾缭绕,似仙境一般,美不胜收。江山如此多娇,我这等追梦之人岂能错过,遂叫醒女儿一道...
    瓶水之冰阅读 653评论 1 6