一、介绍
<div id="app">
{{ message }}
</div>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
![在这里插入图片描述](https://img-blog.csdnimg.cn/2098303e10014ddc89d960856248bb9d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16)
vue:常用7个属性
- el属性
用来指示vue编译器从什么地方开始解析 vue的语法,可以说是一个占位符。 - data属性
用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中。 - template属性
用来设置模板,会替换页面元素,包括占位符。 - methods属性
放置页面中的业务逻辑,js方法一般都放置在methods中 - render属性
创建真正的Virtual Dom - computed属性
用来计算 Vue.js 计算属性,计算属性在处理一些复杂逻辑时是很有用的 - watch属性
Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化 watch:function(new,old){} 监听data中数据的变化 两个参数,一个返回新值,一个返回旧值。
二、基础语法
1.v-bind
<a v-bind:href="url">...</a>
<a :href="url">...</a>
<a :[key]="url"> ... </a>
![在这里插入图片描述](https://img-blog.csdnimg.cn/4a9aa46c7d544e40bde2f344ba16ed4b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_17,color_FFFFFF,t_70,g_se,x_16)
2、条件与循环(if 和 for)
![在这里插入图片描述](https://img-blog.csdnimg.cn/cb65e47154d14775ade42faa87fee2c8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_11,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/e0b4640e283348caa7d7877bd9c552c0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_11,color_FFFFFF,t_70,g_se,x_16)
3.for循环
在控制台里,输入 app4.todos.push({ text: ‘新项目’ }),你会发现列表最后添加了一个新项目。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f1107704357c4f2e95975cf172ae5673.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_12,color_FFFFFF,t_70,g_se,x_16)
4、v-on 监听事件:
事件有Vue的事件、和前端页面本身的一些事件!我们这 click 是vue的事件,可以绑定到Vue中的methods 中的方法事件!
<a v-on:click="doSomething">...</a>
<a @click="doSomething">...</a>
<a @[event]="doSomething"> ... </a>
![在这里插入图片描述](https://img-blog.csdnimg.cn/43681e9bddb8497982733997250bd258.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_18,color_FFFFFF,t_70,g_se,x_16)
5、v-model
![在这里插入图片描述](https://img-blog.csdnimg.cn/b694898094bc4d8f9cc2f59287317046.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_19,color_FFFFFF,t_70,g_se,x_16)
三、组件
组件是可复用的 Vue 实例,说白了就是一组可以重复使用的模板
- 使用 Vue.component() 方法注册组件
![在这里插入图片描述](https://img-blog.csdnimg.cn/4e972be0565f4082bd312ca8576adcf6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16)
1.使用 Vue.component() 方法注册组件:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a820ae8a2b9a4a29ac9ecdede006952a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_16,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/69625944d3594c928eef7fe7f5a393d7.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/da69cc401b90486bb920e8374751e959.png)
四、Axios
说明 :
- 在这里使用了 v-bind 将 a:href 的属性值与 Vue 实例中的数据进行绑定
- 使用 axios 框架的 get 方法请求 AJAX 并自动将数据封装进了 Vue 实例的数据对象中
- 我们在data中的数据结构必须要和 Ajax 响应回来的数据格式匹配!
![在这里插入图片描述](https://img-blog.csdnimg.cn/ef0f5917c0fd430caec0ca65e2f3d418.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_17,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/5d48111b29064e9b8780ffc3224ad038.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_13,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9954d696a58741169c2532e4c5759313.png)
五、计算属性
计算属性的主要特性就是为了将不经常变化的计算结果进行缓存,以节约我们的系统开销;
- 计算出来的结果保存在属性中,在内存中运行:虚拟Dom
计算属性的重点突出在 属性 两个字上(属性是名词),首先它是个 属性 其次这个属性有 计算 的能力(计算是动词),这里的 计算 就是个函数;简单点说,它就是一个能够将计算结果缓存起来的属性(将行为转化成了静态的属性),仅此而已;可以想象为缓存! ![在这里插入图片描述](https://img-blog.csdnimg.cn/a7c6c2b72a7a45f4bdeab3aa207e032c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_17,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/1927008dcae64d45b134ad625c96328b.png)
六、插槽
![在这里插入图片描述](https://img-blog.csdnimg.cn/7fd5557dd97d4fca983f065391e09070.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/ed606a10065243308eed5e9d286fcfc1.png)
<body>
<div id="app">
<todo-title slot="todo-title" :title="title"></todo-title>
<todo-items slot="todo-items" v-for="(item,index) in todoItems"
:item="item" v-bind:index="index" v-on:remove="removeItem" :key="index"></todo-items>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
<script>
Vue.component('todo', {
template: '<div>\
<slot name="todo-title"></slot>\
<ul>\
<slot name="todo-items"></slot>\
</ul>\
</div>'
});
Vue.component('todo-title', {
props: ['title'],
template: '<div>{{title}}</div>'
});
Vue.component('todo-items', {
props: ['item','index'],
template: '<li>{{index}}---{{item}} <button @click="remove"> 删除</button></li>',
methods: {
remove:function (index) {
this.$emit('remove',index)
}
}
});
var vm=new Vue({
el: '#app',
data: {
title:"秦老师系列课程",
todoItems: ['狂神说Java', '狂神说运维', '狂神说前端']
},
methods:{
removeItem:function (index) {
console.log("删除了"+this.todoItems[index]+"OK")
this.todoItems.splice(index,1);
}
}
})
</script>
</body>
七、拓展:Vue-Cli
vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板 ;
预先定义好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速;
主要的功能 : -统一的目录结构 本地调试 热部署 单元测试 集成打包上线
webpack
![在这里插入图片描述](https://img-blog.csdnimg.cn/35d70a7146db4dddb231b1c19667860d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/b6ca5e3ae2904375b2a5d2ac22eb82a7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/90c068e630b24d5ab2c4c54b5d0592bb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/afe7c00e745e44ba822a0384be8c019b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/02b5badec49541f2a31be0f9161cc838.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c981350abfff4d3ebb68a966b453e162.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQ0OTUzOTI4,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c7500bf6aefa4caa867df3343ca1c057.png)
八、Vue Router路由
|