Vue.js入门到入土
Vue学习之旅
webpack
前端模块化,解决js兼容问题,项目打包等都需要webpack使用node创建前端工程

-D参数 在开发阶段使用的包
-S参数 在开发上线都需要的包
webpack配置文件编写:
1  | module.exports={ //开发环境  | 
在package.json文件的scripts脚本加入(可以使用npm运行的脚本)
"dev" :"webpack"
npm run dev 后会发现一个dist文件夹,引入dist/main.js文件,即可
两种模式的区别
1  | development 开发环境使用,打包速度快  | 
默认约定和改变
打包目录:./src/index.js
输出路径 ./dist/main.js
1  | //指定处理的文件  | 
安装配置webpack插件
npm install webpack-dev-server@3.11.2 -D
更改配置文件“scripts” :”dev serve “
重新run发现报错更改webpack-cli版本为4.10.0
安装了webpack-dev-server后,生成的js文件是在内存中的,需要手动引入
html-webpack-plugin 配置完成不用手动进入src的index页面,打开8080就是首页
1  | //导入HTML插件  | 
引入这个插件不需要再手动引入打包过的js文件
devServer节点
设置默认打开浏览器
1  | `devServer:{  | 
loader
加载css等文件注意:
如果报错loader找不到先安装
1  | npm install style-loader css-loader  | 
配置文件
1  | module:{  | 
打包处理less文件
安装loadernpm i less-loader@10.0.1 less@4.1.1 -D
更改配置文件 图片loader加载需要安装url-loader file-loader
1  | npm i url-loader@4.1.1 file-loader@6.2.0 -D  | 
配置build命令
1  | "build" "webpack --mode production"  | 
sourceMap
记录源代码代码的位置信息,以及打包的代码的位置信息更改配置文件中devtool的值即可在调试中输出准确的代码位置
Vue
特点
双向绑定:不操作DOM的前提下,自动把用户填写的数据同步到数据源
数据驱动视图:页面监听数据,数据发生改变重新渲染页面
MVVM架构
Model:数据源
View:当前页面所渲染的DOM结构
ViewModel :vue实例
使用步骤
1、导入vue.js脚本文件
1  | ```  | 
内容渲染指令
v-text
渲染值到标签中,但是会覆盖原有内容
插值表达式
作用同上,但是不会覆盖原来的内容
v-html
渲染文本和HTML标签
属性绑定指令
1  | 注意:插值表达式不能用在属性节点中,只能用在内容节点  | 
事件绑定
vue提供了v-on指令进行事件绑定
1  | <button v-on:click="add">+1</button> //:后面声明事件的类型  | 
并且vue提供methods对象允许我们定义js方法
1  | methods:{  | 
通过this访问数据源中的对象
因为this指向的是Vue对象,可以使用this代替vue实例访问数据源中的值
简写以及传参
1  | <button @click="add(1)">+1</button>  | 
$event事件绑定
1  | //事件没有传递参数,则会有一个默认事件对象  | 

但是如果方法传递了参数,就会覆盖这个事件对象可以通过vue内置对象,$event传入事件对象
事件修饰符
原生js中,我们可以通过事件的方法阻止事件默认行为和事件冒泡。在vue中提供的更加方便的实现:事件修饰符
1  | @click.prevent //.prevent就可以阻止默认行为  | 

按键修饰符
1  | <input type="text" @keyup.enter="append" placeholder="请输入">  | 
双向绑定
双向数据绑定,vue提供v-model进行数据绑定,通过这个指令,用户在视图上面对数据的修改,可以被数据源感知到并更新,从而不用操作DOM。
v-bind:单向数据绑定,数据源改变会导致页面数据改变,但是反过来却不会
表单元素才能使用v-model指令,例如input,select,textareav-model修饰符
v-model会自动判断需要双向绑定的值,radio绑定的是checked属性,text则绑定value属性

条件渲染
vue提供条件渲染v-if和v-show进行动态控制组件的展示
v-if
动态移除元素或者创建元素
v-show
添加和移除display:none元素
v-else搭配v-if使用

列表渲染
vue提供v-for进行对列表的渲染,渲染到哪个元素给那个元素添加v-for格式形如
1  | <tr v-for="index in list">  | 
另外,v-for提供了一个可选参数,返回当前的索引
1  | <tr v-for="(item,index) in list">  | 
官方推荐使用v-for绑定一个key值,为每个对象的item值
1  | <tr v-for="(item,index) in list" :key="item.id">  | 
复习js删除
filter函数接受一个回调函数,返回的是过滤的条件
1  | this.list=this.list.filter(item => return item.id !== id)  | 
过滤器
只能在vue2.0中使用,常用于文本格式化
1  | filters:{  | 
调用
1  | {{val | format(val)}}  | 
全局过滤器
1  | Vue.filter('过滤器名', ()=>{  | 
使用过滤器全局格式化日期
可以使用dayjs插件快速格式化时间
注意这个过滤器要放在vue实例之前,否则不会生效
1  | //定义全局过滤器,格式化时间  | 
侦听器
监听数据的变化
1  | watch:{  | 
对象形式的监听器
1  | watch:{  | 
计算属性
1  | computed:{  | 
axios
用于发送网络请求
1  | axios({  | 
response 对象中的data属性才是服务端返回的值方法返回promise,可以使用await修饰,
但是方法需要是async,async方法返回的是一个promise对象
1  | const data= await axios({  | 
get
1  | axios.get('url',{  | 
post
1  | axios.post('url',{  | 
挂载axios到Vue实例上
在main.js中通过原型挂载
1  | //引入axios  | 
调用
1  | this.$axios.post()  | 
利用Cli安装Vue项目
1  | npm i @vue/cli -g  | 
自定义安装,选择最后一项

选择2.0版本的vue(主流)
选择less进行样式预处理
配置文件的创建,选择第一项创建项目,如果项目创建慢,设置为淘宝镜像
npm run serve 启动项目

空格是选择安装的插件,回车则是确定选择项
项目构成
assets:存放静态资源,图片,css等内容
components:存放可以重用的组件
App.vue项目的跟组件
main.js程序入口文件
1  | import App from './App.vue'  | 
组件的data不能使用以前的对象写法,而是应该是一个函数,如下
1  | data(){  | 
组件方法
1  | methods:{  | 
启用less
组件使用
使用import导入
1  | //@指的是src目录  | 
使用components节点注册
1  | components:{  | 
以标签形式使用
1  | <Login></Login>  | 
全局注册组件
在main.js下面使用Vue.component(‘注册名称’,’组件名称’)
1  | import Right from './components/Right.vue'  | 
组件之间的数据共享
props
父组件向子组件传值
1  | //子组件定义props  | 
默认值(使用默认值定义props)
1  | props:{  | 
子传父
需要在子组件中定义事件
1  | getName(){  | 
父组件中
调用numChange方法
1  | <NewSon @numChange="getNewName"></NewSon>  | 
兄弟传值

样式冲突
给属性添加scoped属性,默认会给组件的所有标签添加一个自定义属性,不会影响到其他组件的样式