(1)Vue脚手架时Vue官方提供的标准化开发工具(开发平台)。
(2)文档 Vue CLI
(1)配置淘宝镜像:npm config set registry https://registry.npm.taobao.org
(2)全局安装@vue/cli。(仅第一次执行)(npm install -g @vue/cli)
(3)切换到项目路径,使用指令创建项目:vue create xxx
(4)启动项目:npm run serve
(1).gitignore:配置不接受git管理的文件。
(2)babel.config.js:es6转es5要用到的babel配置文件(不需要修改)。
(3)package.json:
"scripts": { "serve": "vue-cli-service serve",//运行命令 "build": "vue-cli-service build",//代码完成后构建命令,将vue文件转为js,css,html文件 "lint": "vue-cli-service lint"//代码检查 },
(4)package-lock.json:包管理器版本管理。
(5)src:
(5.1)main.js:项目入口文件
/* 项目入口文件 */ //引入vue import Vue from 'vue' //引入App组件,App是所有组件的父组件 import App from './App.vue' //关闭vue生产提示 Vue.config.productionTip = false //创建vue实例对象 new Vue({ //将app组件放入容器中 render: h => h(App), }).$mount('#app')//等于el:"#app"
(5.2)App.vue
(5.3)index.html
<%= htmlWebpackPlugin.options.title %>
备注:详细参考3.1.5
启动失败原因为:语法检查不通过。
在项目的根目录找到(没有就自行创建)
vue.config.js
文件,关闭语法检查即可const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ transpileDependencies: true, lintOnSave:false /*关闭语法检查*/ })
(1)vue.js与vue.runtime.xx.js的区别:
(1.1)vue.js是完整版的VUE,包含核心功能+模板解析器。
(1.2)vue.runtime.xx.js是运行版VUE,只包含核心功能,没有模板解析器。
(2)因为vue.runtime.xx.js没有模板解析器,所以不可以用template配置项,需要使用
render函数,将接受到的createElement函数去指定内容。
vue隐藏了webpack相关的配置,需要查看可以执行:vue inspect > output.js
可以看到但是无法修改,具体修改方式请参考:
配置参考 | Vue CLI
(1)被用来给元素或子组件注册引用信息(代替id)。
(2)应用在html不爱券商,获取真是dom元素,应用在组件标签上是组件实例对象(vc)。
(3)使用方式:
(3.1)打标识:
Ref属性测试
/。 (3.2)获取:this.$refs.school/this.$refs.title。
(3.3)获取到子组件之后也可以修改其内部属性。
Ref属性测试
功能:让组件接收外部传入数据。
(1)传递数据
(2)接受数据:
(2.1)props:['name']
(2.2)限制类型
props:{ id:String, name:String, size:String },
(2.3)限制类型,限制是否必填,设置默认值
props: { id: { type: String, //类型 required: true, //是否必填 }, name: String, size: { type: String, //类型 default: "型号(默认)", //是否必填 }, }
(3)备注:props事制度的,Vue底层会检测你对props的修改,如果进行了修改会发出警
告,如果业务需要,那么应该将props的内容复制到data中一份然后修改data中的据。
Props属性测试
物料信息
Msg:{{ msg }}
物料ID:{{ id }}
物料名称:{{ name }}
物料尺寸:{{ mySize }}
功能:可以把多个组件共用的配置提取成一个混入对象。
使用方式:
(1)定义混合
export const mixin = { methods: { showName() { alert(this.name) } }, mounted() { //alert("你好啊"+this.name) }, data(){ return { size:"mixinSIze" } } }
(2)使用混入
(2.1)全局混入:import {hunhe} from './mixin'; Vue.mixin(hunhe)。
(2.2)局部混入:import {hunhe} from './mixin';mixins:['hunhe']
(3)注意:data中的数据以源文件为主,methods中的数据都会执行,而且优先执行混入的
物料信息
Msg:{{ msg }}
仓库ID:{{ id }}
仓库Size:{{ size }}
仓库名称:{{ name }}
物料信息
Msg:{{ msg }}
物料ID:{{ id }}
物料名称:{{ name }}
物料尺寸:{{ mySize }}
//引入Vue
import Vue from 'vue'
//引入app
import App from './App'
import {hunhe} from './mixin'
// Vue.mixin(hunhe)
//关闭提示
Vue.config.productionTip=false
new Vue({
el:"#app",
render:h=>h(App)
})
功能:用于增强Vue
本质:包含install方法的一个对象,install的第一个参数是Vue(vm的原型),第二个以后的
参数是插件使用者传递的数据。
定义插件:
export default { install(Vue,a,b,c){ console.log('install',Vue) //拿到Vue的构造方法,可以进行操作,Vue原型上的方法和属性vm和vc都能使用 //全局过滤器 //Vue.filter() //全局指令 // Vue.directive() //全局混入 // Vue.mixins() //给Vue原型增加方法,属性等等 // Vue.prototype.$myMethod=function(){} // Vue.prototype.prototype="" } }
使用插件:Vue.use()。
作用:让样式在局部生效防止冲突。
写法:
(1)组件化编码流程
(1.1)拆分静态组件:组件按照功能点拆分,命名不要与html元素冲突。
(1.2)实现动态组件:考虑好数据存放位置,数据是一个组件在用,还是一些都在用。
(1.2.1)一个组件再用:放在自身即可。
(1.2.2)一些组件在用,放在他们共同的父组件上。(状态提升)
(1.3)实现交互:绑定事件。
(2)props适用于:
(2.1)父组件==》子组件 通信。
(2.2)子组件==》父组件 通信(要求父组件先给子组件一个函数)。
(3)v-model使用时要切记,v-model绑定的不能是props传过来的值,因为props内传入的
值是不可以修改的。
(4)props传过来的若是对象型的值,修改对象属性时vue不会报错,但不推荐这样做。
webStorage:
(1)储存内容大小一般支持5m左右(浏览器不同也可能不一样)
(2)浏览器通过Window.sessionStorage和window.localStorage属性来实现本地存储机制。
(3)相关API:
(3.1)xxxxxxStorage.setItem(key,vaule);
该方法会把一个兼职顿添加到存储中,如果已有该键,则会更新内容。
(3.2)xxxxxxStorage.getItem(key);
该方法接收一个key作为参数,获取对应的value。
(3.3)xxxxxxStorage.removeteam(key);
该方法接收一个key作为参数,删除对应的key和value。
(3.4)xxxxxxStorage.clear();
清除存储中所有数据。
(4)备注:
(4.1)sessionStorage存储的内容会随着浏览器窗口关闭而消失。
(4.2)localStorage存储的内容需要手动调用相应方法才会消失。
(4.3)xxxxxxStorage.getItem(key);获取不到会返回一个null
(4.4)保存对象时可用:JSON.stringify(person),
解析时用:JSON.parse(localStorage.getItem("personToJson"))
JSON.stringify(null)依然是null
saveData() {
let person = { name: "张三", age: 18 }
localStorage.setItem("msg", "hello!!");
localStorage.setItem("numberMsg", 666);
localStorage.setItem("person",person);
localStorage.setItem("personToJson", JSON.stringify(person));
},
readData() {
let person = { name: "张三", age: 18 }
console.log( localStorage.getItem("msg", "hello!!"));
console.log(localStorage.getItem("numberMsg", 666));
// console.log(localStorage.getItem("person",person));
console.log(JSON.parse(localStorage.getItem("personToJson")));
},
deleteData() {
localStorage.removeItem("msg")
localStorage.removeItem("numberMsg")
localStorage.removeItem("personToJson")
},
clearData(){
localStorage.clear();
}
(1)一种组件捡的通信方式,适用于:子组件===》父组件
(2)适用场景:A是父组件,B是子组件,B想给A传值,那么就要在A中给B绑定自定义事
件,事件回调在A中。
(3)绑定自定义事件:
(3.1)再父组件中使用
(3.2)再父组件中使用
(3.3)若想让自定义事件只触发一次,可以用once修饰符或者$once方法。
(4)触发自定义事件: this.$emit(name,value)。
(5)解绑滴定仪事件: this.$off(name)。
(6)组件上也可以绑定原生DOM事件,要用native修饰符。
(7)注意,通过this.$refs.student.$on(name,回调),板顶自定义事件时,回调要么要么在
methods中,要么用箭头函数,否则this会指向调用函数的实体。
(1)全局事件总线(GlobalEventBus)是一种组件之间通信的方式,适用于任意组件之间
的通信。
(2)安装全局事件总线:
beforeCreate(){ Vue.prototype.$bus=this }
(3)使用全局事件总线:
(3.1)接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,回调由A
组件自身实现。
mounted(){ this.$bus.$on('hello',(data)=>{ console.log('School组件收到了',data) }) }
(3.2)提供数据
this.$bus.$emit('hello',this.student.name)
(4)使用完毕后,组件销毁之前最好用$off解绑当前组件所使用的事件
beforeDestroy(){ this.$bus.$off('hello') },
(1)消息订阅预发布(pubsub)是一种组件间的通信方式,适用于任意组件通信。
(2)使用步骤:
(2.1)安装pubsub:npm i pubsub-js。
(2.2)引入import pubsub from 'pubsub-js'
(2.3)接收数据:A组件接收数据则在A组件内订阅消息,回调函数由A实现::
this.pubId=pubsub.subscribe('getStudentName',(msgName,data)=>{ })
第一个参数为消息的名称,第二个参数为传入的参数。
(2.4)提供数据:pubsub.publish('getStudentName',this.student.name)
(2.5)容器销毁之前,取消消息订阅: pubsub.unsubscribe(this.pubId)
(1)语法:this.$refs.inputTitle.focus()。
(2)作用:在下一次dom更新后在执行指定的回调函数。
(3)适用:数据改变后,基于更新后的dom执行某些操作时,在nextTick中指定回调函数。
(1)作用:在插入,更新,或者移除dom元素时,在合适的时候给元素添加样式类名。
(2):
(3)写法:
(3.1)准备好样式
元素进入:
.1)v-enter:进入的起点。
.2)v-enter-active:进入的过程中。
.3)v-enter-to:进入的重点。
元素移除入:
.1)v-leave:离开的起点。
.2)v-leave-active:离开的过程中。
.3)v-leave-to:离开的重点。
(3.2)使用
包裹要过度的元素,并配置name属性。 (3.3)备注:若有多个元素使用transition,要用
,且每个元素都要 指定key。
transition
显示/隐藏动画测试
transition-group
显示/隐藏动画测试1
显示/隐藏动画测试2
transition 引入css
显示/隐藏动画测试1