<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>初识vue</title>
<!-- 引入Vue -->
<script src="../js/vue.js"></script>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="root">
<h1>Hello!{{name}}!</h1>
</div>
<script>
Vue.config.productionTip = false // 阻止vue在启动时生成生产提示
new Vue({
el:'#root', //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串
data:{ //data用于存储数据,数据共el所指定的容器去使用
name:'JOJO'
}
})
</script>
</body>
</html>
注意:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>vue模板语法</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
<h1>插值语法</h1>
<h3>你好,{{name}}!</h3>
<hr>
<h1>指令语法</h1>
<a v-bind:href="url">快去看新番!</a><br>
<a :href="url">快去看新番!</a>
</div>
<script>
Vue.config.productionTip = false
new Vue({
el:'#root',
data:{
name:'JOJO',
url:'https://www.bilibili.com/'
}
})
</script>
</body>
</html>
效果:
html 中包含了一些 JS 语法代码,语法分为两种,分别为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数据绑定</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
单向数据绑定:<input type="text" v-bind:value="name"><br>
双向数据绑定:<input type="text" v-model:value="name">
</div>
<script>
Vue.config.productionTip = false
new Vue({
el:'#root',
data:{
name:'JOJO'
}
})
</script>
</body>
</html>
v-bind
):数据只能从data流向页面v-model
):数据不仅能从data流向页面,还可以从页面流向data<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>el与data的两种写法</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
<h1>Hello,{{name}}!</h1>
</div>
<script>
Vue.config.productionTip = false
//el的两种写法:
// const vm = new Vue({
// // el:'#root', //第一种写法
// data:{
// name:'JOJO'
// }
// })
// vm.$mount('#root')//第二种写法
//data的两种写法:
new Vue({
el:'#root',
//data的第一种写法:对象式
// data:{
// name:'JOJO'
// }
//data的第二种写法:函数式
data(){
return{
name:'JOJO'
}
}
})
</script>
</body>
</html>
el有2种写法:
vm.$mount('#root')
指定el的值data有2种写法:
由Vue管理的函数,一定不要写箭头函数,否则this就不再是Vue实例了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>mvvm</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
<h2>名称:{{name}}</h2>
<h2>战队:{{rank}}</h2>
<h2>测试:{{$options}}</h2>
</div>
<script>
Vue.config.productionTip = false
new Vue({
el:'#root',
data:{
name:'uzi',
rank:'RNG'
}
})
</script>
</body>
</html>
效果:
总结:
总结:
object.defineProperty()
把data对象中所有属性添加到vm上。<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>事件的基本用法</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
<h2>hello,{{name}}</h2>
<button v-on:click="showInfo1">点我提示信息1</button>
<button @click="showInfo2($event,66)">点我提示信息2</button>
</div>
<script>
Vue.config.productionTip = false
new Vue({
el:'#root',
data:{
name:'JOJO'
},
methods:{
showInfo1(event){
console.log(event)
},
showInfo2(evnet,num){
console.log(event,num)
}
}
})
</script>
</body>
</html>
总结:
v-on:xxx
或@xxx
绑定事件,其中xxx是事件名@click="demo
和@click="demo($event)"
效果一致,但后者可以传参1 ..prevent:阻止事件的默认行为event.preventDefault()
2 ..stop:停止事件冒泡event.stopPropagation()
1 .keycode:操作的是某个keycode值的键
2 ..keyName:操作的某个按键名的键(少部分)
2. 在computed对象中定义计算属性。
3. 在页面中使用{{方法名}}来显示计算的结果。
1. 通过通过vm对象的$watch()或watch配置来监视指定的属性
2. 当属性变化时,回调函数自动调用,在函数内部进行计算
2. class/style绑定就是专门用来实现动态样式效果的技术
1. :class='xxx'
2. 表达式是字符串:'classA'
3. 表达式是对象:{classA:isA,classB:isB}
4. 表达式是数组:['classA','classB']
1. :style="{color:activeColor,fontSize:fontSize+'px'}"
2. 其中activeColor/fontSize是data属性
1. v-if与v-else
2. v-show
1. 如果需要频繁切换v-show较好
2. 当条件不成立时,v-if的所有子节点不会解析(项目中使用)
遍历数组:v-for/index
遍历对象:v-for/key
1 .v-text:更新元素的 textContent 2 .v-html:更新元素的 innerHTML 3 .v-if:如果为 true,当前标签才会输出到页面 4 .v-else:如果为 false,当前标签才会输出到页面 5 .v-show:通过控制 display 样式来控制显示/隐藏 6 .v-for:遍历数组/对象 7 .v-on:绑定事件监听,一般简写为@ 8 .v-bind:绑定解析表达式,可以省略 v-bind 9 .v-model:双向数据绑定 10 .v-cloak:防止闪现,与 css 配合:[v-cloak]{display:none}
Vue.directive(‘my-directive’,function(el,binding){
el.innerHTML=binding.value.toupperCase()
})
2. 注册局部指令
directives:{
‘my-directive’:{
bind(el,binding){
el.innerHTML=binding.value.toupperCase()
}
}
}
1 ) 使用指令 v-my-directive=‘xxx’
2 ) 更新状态:this.xxx=value
3 ) 销毁 vue 实例:vm.$destory()
1. mounted():发送ajax请求,启动定时器等异步任务
2. beforeDestory():做收尾工作,如:清除定时器
1. 理解:向外提供特定功能的js程序,一般就是一个js文件
2. 为什么: js文件很多很复杂
3. 作用:复用js,简化js的编写,提高js运行效率
1. 理解:用来实现局部(特定)功能效果的代码集合(html/css/js/image.....)
2. 为什么:一个界面的功能很复杂
当应用中的js都以模块来编写的,那这个应用就是一个模块化的应用。
<template>
页面模板
</template>
exportdefault{ data(){return{}}, methods:{}, computed:{}, components:{} }
3. 样式
样式定义
1. Vue脚手架是Vue官方提供的标准化开发工具(开发平台)。
2. 最新的版本是 4 .x。
3. 文档:https://cli.vuejs.org/zh/。
第一步(仅第一次执行):全局安装@vue/cli。 npminstall-g@vue/cli 第二步: 切换到你要创建项目的目录 ,然后使用命令创建项目 vuecreatexxxx 第三步:启动项目 npmrunserve 备注:
2 .读取方式: this.$refs.xxxxxx
props:['name','age','setName']
3. 读取方式二:指定名称和类型
props:{
name:String,
age:Number,
setNmae:Function
}
4. 读取方式三:指定名称/类型/必要性/默认值
props:{
name:{type:String,required:true,default:xxx},
}
< Header@addTodo=" addTodo " /> 或者 < tHheiasd. e
this .$emit( ‘addTodo’ , todo)
1 ) 所有组件对象都能看到 Vue 原型对象上的属性和方法 2 ) Vue.prototype.bus=newVue(),所有的组件对象都能看到bus=newVue(),所有的组件对象都能看到bus=newVue(),所有的组件对象都能看到bus 这个属性 对象 3. 全局事件总线 1 ) 包含事件处理相关方法的对象(只有一个) 2 ) 所有的组件都可以得到
new beVfuoer(e{Create () { // 尽量早的执行挂载全局事件总线对象的操作
},Vue. prototype. **globalEventBus** = **this** }).mount( ‘#root’ )
this. **globalEventBus∗∗.globalEventBus** .globalEventBus∗∗.on( ‘deleteTodo’ , this .deleteTodo)
this. **globalEventBus∗∗.globalEventBus** .globalEventBus∗∗.emit( ‘deleteTodo’ , this. index )
this. **globalEventBus∗∗.globalEventBus** .globalEventBus∗∗.off( ‘deleteTodo’ )
3 .需要引入一个消息订阅与发布的第三方实现库: PubSubJS
2 .下载:npminstall-Spubsub-js 3 .相关语法 ( 1 ) importPubSubfrom’pubsub-js’ //引入 ( 2 ) PubSub.subscribe(‘msgName’,functon(msgName,data){}) ( 3 ) PubSub.publish(‘msgName’,data):发布消息,触发订阅的回调函数调用 ( 4 ) PubSub.unsubscribe(token):取消消息的订阅
1 .操作css的trasition或animation
2 .vue会给目标元素添加/移除特定的class
3 .过渡的相关类名:
1 .xxx-enter-active:指定显示的transition
2 .xxx-leave-active:指定隐藏的transition
3 .xxx-enter/xxx-leave-to:指定隐藏时的样式
https://api.github.com/search/users?q=xxx
通用的 Ajax 请求库,官方推荐,使用广泛
vue 插件库,vue 1 .x 使用广泛, 官方已不维护。
slot 技术,注意:插槽内容是在父组件中编译后,再传递给子组件的。
1 .vuex管理的状态对象
2 .它应该是唯一的
3 .示例代码:
2 .通过commit()来触发mutation中函数的调用,间接更新state
3 .如何触发actions中的回调?
在组件中使用: $store.dispatch('对应的action回调名') 触发
4 .可以包含异步代码(定时器,ajax等等)
5 .示例代码:
1 .值是一个对象,包含多个直接更新state的方法
2 .谁能调用mutations中的方法?如何调用?
在action中使用: commit('对应的mutations方法名') 触发
3 .mutations中方法的特点:不能写异步代码、只能单纯的操作state
4 .示例代码:
1 .包含多个module
2 .一个module是一个store的配置对象
3 .与一个组件(包含有共享数据)对应
vue的一个插件库,专门用来实现SPA应用
1. 单页Web应用(singlepagewebapplication,SPA)。
2. 整个应用只有 一个完整的页面 。
3. 点击页面中的导航链接 不会刷新 页面,只会做页面的 局部更新。
4. 数据需要通过ajax请求获取。
1. 一个路由就是一组映射关系(key-value)
2. key为路径,value可能是function或component
2. 路由分类
1. 后端路由:
1 ) 理解:value是function,用于处理客户端提交的请求。
2 ) 工作过程:服务器接收到一个请求时,根据 请求路径 找到匹配的 函数
来处理请求,返回响应数据。
2. 前端路由:
1 ) 理解:value是component,用于展示页面内容。
2 ) 工作过程:当浏览器的路径改变时,对应的组件就会显示。