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属性,默认会给组件的所有标签添加一个自定义属性,不会影响到其他组件的样式