1.vue项目环境的搭建
Vue
是一个 JavaScript
框架。它是一个以 JavaScript
编写的库。也是以一个 JavaScript
文件形式发布的,可通过 script
标签添加到网页中。
1.1 CDN引入
cdn
引入其实就是在vue
里面已经自带了的index.html
文件中引入。
<script src=" https://cdn.bootcss.com/vue/2.3.3/vue.js "></script>
CDN:全称是Content Delivery Network,即内容分发网络。CDN
的通俗理解就是网站加速,可以让客户端快速度访问资源。
当然除了这种方法,开发中用得最多的还是下面这种。
1.2 使用官方脚手架(vue-cli)
1.2.1 什么是vue-cli ?
vue-cli
是一个基于vue.js
进行快速开发的完整系统,是一个官方脚手架,可以帮助我们快速创建vue
项目的工程目录,目前最新的版本为4.x。而vue-cli
致力于将vue
生态中的工具基础标准化。它确保了各种构建能够基于智能的默认配置即可平稳衔接,这样你就可以专注的在撰写应用上,而不必好几天纠结配置的问题。与此同时,它也为每个工具提供了调整配置的灵活性。
1.2.2 vue-cli安装及使用步骤
首先要在你要写vue
代码的地方,创建一个大文件夹。其次在安装vue-cli
的时候对node
环境也是有要求的,我建议还是用官方推荐的环境也就是版本比较高的。
- 在我们之前创建的文件夹内,
win+r
打开命令提示符,cmd
进入。也可以用这种方式,然后回车即可。 - 全局安装vue-cli
命令提示符出来之后,就可以用yarn
与npm
的配置指令进行下载了{yarn global add @vue-cli}
或
{npm i -g @vue-cli}
。
- 创建项目。在以往我们都是手动去创建一个文件,但在
vue
里面我们只需要给它指示命令就可以创建好一个文件了,并且这个文件是自带了我们所需要的依赖包的。{vue create 项目名}
- 等创建好项目之后,就进入项目目录,启动项目。
{yarn serve}
或{npm run serve}
1.2.3 项目目录详解
在创建好项目之后,我们会看到这样一个列表。
一级目录:
- git:其实就是GitHub、码云这些分布式管理仓库。
- node_modules:依赖的第三方模块
- public:vue服务器的静态文件目录,只有唯一的一个
[index.html]
- src:我们开发的目录,也是最重要的目录,源文件让编程人员写代码的目录。
- gitignore:git忽略列表
- babel.config.js:es6编译配置
- package-lock.json:包描述文件(记录更详细,记住当时的版本信息)
- package.json:包描述文件
- README.md:说明文档
二级目录:
- assets: 静态资源 styles images fonts
- components:组件,是.vue的文件,主要是公用的小组件
- views:页面级别的组件
- App.vue:整个应用的顶级组件.
- main.js:入口文件
备注:我们是使用vue
的时候可以安装vetur
插件,它可以支持vue
代码高亮显示。第二个就是Vue VSCode Snippets
插件,它可以更好的提高我们写代码的效率,因为新建一个vue
文件时,每次都需要手打template
结构、script
逻辑交互、style
样式。所以使用这个插件我们只需要一个vbase
命令即可解决,并且还可以自行选择less
、scss
这些。
2.组件
2.1 什么是组件 ?
所谓组件:其实就是封装起来的具有独立功能的UI
部件。在vue
中,组件(component
)是具有可复用的代码模块,它是Vue
中代码组织和代码复用的核心。组件可以被看作是一个自定义元素,一个组件可以拥有自己的模板、样式、行为和数据逻辑等等。
开发者从功能的角度出发,将UI
分成不同的组件,每个组件都独立封装。
整个UI
是一个通过小组件构成的大组件,每个组件只关心自己部分的逻辑,彼此独立。
组件的特点:
- 可复用:组件封装了特定的功能,可以在不同的场景中进行复用,避免了代码重复和冗余。
- 可扩展:组件可以被其他组件继承或扩展,从而形成更加复杂和灵活的组件体系。
- 可配置:组件可以接收属性和事件,通过属性和事件可以对组件的行为进行配置和控制。
在Vue
中,组件是通过Vue.components()
或者{export default { components:{} }}
方法来定义和注册的,每个组件都是一个Vue
实例,可以在应用中通过标签的方式来使用组件。组件化开发是Vue
的一大特色,它能够提高代码的复用性和可维护性,对于大型应用的开发和维护来说,是非常有帮助的。
2.2 单文件组件
一个vue
文件其实就是一个单文件组件,功能逻辑独立,由template
、scripts
、style
三部分组成。
<template>
<!-- 这里是写html结构的,但是有且只能有一个根节点 -->
</template>
<script>
// 这里就是写JS代码的,默认需要暴露出去一个实例对象
export default {};
</script>
<style>
/* 此处为css样式 */
</style>
注意:style
标签上可以通过,lang="less"
选择预处理语言,但是有些需要安装对应的loader
模块,也可以通过scoped
,让样式私有化。
2.3 使用自定义组件
使用自定义组件分为三个步骤:
- 引入组件:引入一个已经写好的
xxx.vue
组件 - 注册组件:在
components
里面注册 - 使用组件:通过标签名使用。
<!-- 结构 -->
<template>
<div id="app">
<!-- 3. 使用组件(也可以通过单标签使用) -->
<Hello></Hello>
</div>
</template>
<!-- 逻辑与交互 -->
<script>
// 1. 引入组件
import Hello from "./components/Hello.vue";
export default {
// 2. 注册组件
components: {
Hello // 等同于: "Hello": Hello
}
};
</script>
<!-- 样式 -->
<style lang="less">
</style>
3.Mustach表达式和配置选项
3.1 data配置选项和mustach模板语法
目前template
模板中的数据是写死的,然后渲染动态的数据呢?这个时候我们就需要data
配置选项和mustach
表达式派上用场了。
<template>
<div>
<!-- mustach胡须表达式,用于把data中的数据,输出到html模板中,用{{}}表示 -->
<h1>Hello {{ userName }} !</h1>
</div>
</template>
3.1.1 为什么data是函数而不是对象?
在Vue
中,data
属性不是一个简单的JavaScript
对象,而是一个函数,这是因为Vue
需要为每个组件实例都创建一个独立的数据对象,如果data
是一个简单的对象,就会出现在多个组件实例中共享的问题,从而导致数据混乱。
因此,在Vue
中,通过将data
属性设置为一个函数,就能够确保每个组件实例都可以创建自己的数据对象,从而避免了数据共享的问题。具体来说,当组件实例化时,Vue
就会调用这个函数,返回一个全新的数据对象,并将其作为组件实例的data
属性值,从而确保每个组件实例的data
属性都是一个独立的数据对象。
另外,将data
设置为函数还有一个好处是能够让Vue
在开发过程中更好地支持数据响应式。Vue
会递归对data
中的所有属性进行劫持,即为这些属性实现响应式机制,通过修改这些属性的值,就能够触发相应的组件更新,而如果data
是一个简单的对象,则可能会出现劫持不全的问题,从而导致数据响应式不完整。因此,Vue
要求将data
设置为一个函数,以确保能够正确实现数据的响应式处理。
<script>
export default {
// data选项用于准备动态数据,data是一个"函数",必须返回一个对象,对象中再写各种数据
data() {
return {
userName: "根生"
}
}
};
</script>
<style lang="scss" scoped>
</style>
3.2 Mustach表达式与配置选项
表达式:{{表达式}}
注意:表达式必须能输出唯一结果,不能写if else
条件等其他JavaScript
代码。
3.2.1 配置选项
el
:挂载dom。data(){}
:准备动态数据,必须是函数,返回一个对象。methods:{}
:函数方法component:{ "标签名" : 引入的组件的变量名 }
:注册组件
4.指令
4.1 什么是指令?
在Vue
中,指令(directive
)是一种特殊的标记,是写在标签上的一种自定义属性。它的作用是在模板中为特定的HTML
元素提供特殊的响应式行为。Vue
指令的一个重要特点就是能够将某个元素与Vue
实例中的数据进行绑定,以实现数据的动态渲染和响应式更新。
指令一般由一个以"v-
"开头的属性构成,例如v-bind
、v-if
、v-for
等,其中v-bind
指令用于将Vue
实例中的数据动态绑定到HTML
元素的特定属性上(例如显示数据、控制元素的样式、控制元素可见性等),v-if
指令用于根据条件增加或删除特定的元素等。
Vue
中的指令非常灵活,你可以自定义指令以满足特定的需求,例如读写非标准HTML
属性、操作DOM
、封装复杂的交互逻辑等。
4.2 常用指令
4.2.1 v-text 和 v-html
都可以把数据渲染到一对标签中间也就是可以渲染到页面。
- ****
v-text
:
将数据渲染到指定内容中并且是纯文本内容。它会将数据解析为纯文本,并将其插入到元素的 textContent
属性中。通常情况下,v-text
和 {{}}
语法效果相同。
- ****
v-html
:
将数据渲染为HTML
代码。它会将数据解析为HTML
代码,并将其插入到元素的innerHTML
属性中。需要注意的是,使用v-html
可能存在安全性问题,如果插入的HTML
代码中包含恶意脚本,可能会导致跨站脚本攻击(XSS)。所以在使用v-html
时需要谨慎对待。
- 作用:
使用v-text
会将 message
渲染为纯文本字符串,不会解析其中的HTML
代码,而使用v-html
则会将 message
解析为HTML
代码。
作用: 页面动态数据的回显(常见: v-text
直接用“{{表达式}}”替代, v-html
显示富文本数据)
<div>
<p v-text="message"></p>
<p v-html="message"></p>
</div>
4.2.2 v-show 和 v-if
- ****
v-show
:
不会改变 DOM
的结构,只是控制元素的 CSS
属性 display
,当表达式的值为 false
时,元素被隐藏,否则元素被显示,从而改变元素在界面中的可见性。当初始时,元素的显示频率较高时会使用 v-show
。
v-if
:
会根据表达式的值动态地向 DOM
中添加或删除元素节点,当表达式的值为true
时,元素被添加到 DOM
树中,否则元素从DOM
树中删除,因此v-if
更加适合用在需要频繁切换的情况下,例如在切换不同的页面时。不过切换时会影响我们页面的排列。
- 作用:
控制页面内容显示隐藏(常见:v-show
显示/隐藏切换频繁,v-if
显示/隐藏切换不频繁,但对隐藏安全要求较高)
<h4 v-show="bool">您输入的用户名错误</h4>
<h4 v-if="bool">您输入的用户名错误</h4>
4.2.3 v-if 和 v-else-if 和 v-else
这几个指令需要一起配合使用,逻辑和js
中的条件判断语句一致,会从上往下,找到满足条件的第一个表达式,渲染该DOM
(指令元素间,必须紧密相间),并且可以根据不同的条件渲染不同的模板。
v-if
:
根据条件渲染模板。如果条件为真,则渲染模板,否则不渲染。
v-else-if
:
用于在多个条件中切换,必须紧跟在v-if
或v-else-if
后面。如果前面的条件为假,并且这个条件为真,则渲染模板,否则继续匹配下一个v-else-if
指令或者v-else
指令。
v-else
:
如果前面的所有条件都为假,则渲染模板。
- 用于页面结构中的逻辑判断。(常见:根据场景的不同,制定不同的显示规则)
<template>
<div>
<p v-if="isA">This is A.</p>
<p v-else-if="isB">This is B.</p>
<p v-else>This is not A or B.</p>
</div>
</template>
<script>
export default {
data() {
return {
isA: true,
isB: false
}
}
}
</script>
如果isA
为true
,则渲染模板<p>This is A.</p
,如果isA
为false
并且isB
为true
,则渲染模板<p>This is B.</p>
,否则渲染模板<p>This is not A or B.</p>
。
需要注意的是,v-else-if
和v-else
指令必须紧跟在v-if
或v-else-if
指令之后,否则会导致语法错误。同时,这些指令也可以通过配合使用 key 属性,实现更精细的渲染控制。
4.2.4 v-for
用来循环数组和对象
循环数组: v-for = "(item,index) in arr"
其中,item
和 index
都是变量名,arr
是一个可迭代的数组或对象。这条指令代表了对arr
的遍历,将arr
中的每一项分别绑定到item
变量的值上,并且可以通过index
变量获取当前元素的索引位置。这些变量可以在模板中使用。
循环对象:v-for = "(item(元素的值),健民,index(元素的索引))"
作用: 用于根据模板,批量生产显示内容。
<template>
<div>
<ul>
<li v-for="(item, index) in list" :key="index">{{ index }} - {{ item }}</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
list: ['apple', 'banana', 'orange']
}
}
}
</script>
以上示例代码将会渲染一个无序列表,包含了数组list
中的每个元素以及其对应的索引位置。在这个例子中,item
就代表了当前遍历到的数组元素,index
就代表了当前元素的索引。
需要注意的是,每个v-for
都需要添加一个唯一的key
属性,这个属性可以是元素的id
或者是元素在当前列表中唯一的键。这个key
主要用于Vue
执行DOM
更新时的优化,如果没有key
,Vue
每次更新渲染时对每个元素都会重新创建和销毁,而带上key
后,Vue
可以根据key
判断哪些元素是需要更新的,哪些是需要重新创建的,从而优化性能。
4.2.5 v-model
v-model
指令是Vue
框架提供的一种双向数据绑定的语法糖,它可以在表单元素和组件中创建双向绑定。使用v-model
指令可以方便地把表单元素的值绑定到Vue
实例的数据属性上,并可以实现数据的双向绑定,即当数据更新时,视图也会随之更新,而当用户在视图中更新数据时,数据也会更新。也就是绑定DOM
元素的value
和data
,value
发生变化,自动修改data
,反之亦然。
<input v-model="message">
在上述代码中,message
是Vue
实例中定义的一个数据属性,以文本框为例,v-model
指令可以将文本框的值与message
数据属性进行双向绑定,当用户在文本框中输入内容时,message
属性的值也会随之更新,反之亦然。
v-model
指令可以用在多种表单元素上,包括文本框、复选框、单选框、下拉框等,还可以自定义组件中使用。不过需要注意的是,在使用自定义组件中的v-model
时,需要定义一个value
属性和一个input
事件来完成双向数据绑定,如:
Vue.component('my-checkbox', {
props: ['value'],
template: `
<label>
<input type="checkbox" v-bind:checked="value" v-on:change="$emit('input', $event.target.checked)">
{{ value }}
</label>
`,
})
需要通过props
属性传入一个value
属性,表示该组件的当前值。然后在组件模板中,通过v-bind
绑定value
属性到表单元素中,同时在表单元素上通过v-on
监听change
事件,并在改事件回调中通过$emit
触发input
事件,同时传递更新后的值。
综上所述,v-model
指令是Vue
框架中非常重要的一项特性,可以方便地实现表单元素和组件数据的双向绑定,加强了数据和视图的关联,提高了开发效率。
5.事件处理
我们的知道,事件的核心有四要素,分别是事件源(html
元素),事件类型(事件名称),事件函数(事件的回调函数),事件对象(记录事件上下文的信息)。而在vue
中一样都有的。
5.1 基础语法
语法:v-on: 事件名
v-on
是Vue.js
提供的一种事件监听机制,用来绑定DOM
事件,响应用户输入。v-on
指令可以用于监听DOM
事件,如click
、change
、keypress
等等。
基本指令如下所示:
<!-- <标签 v-on:事件类型 = "函数名"></标签> -->
<button v-on:click="handleClick">点我</button>
在上面的例子中,我们使用v-on
指令监听点击事件,这里监听点击事件是绑定在按钮上的,当点击该按钮时会触发相应的事件处理函数。
当然,在实际开发中,我们还可以使用简化的语法:
<button @click="handleClick">点我</button>
@
符号是v-on
指令的一个简化写法。两种写法是等价的。
除了简单的绑定单一的事件处理函数外,V-on
指令还提供其他功能,如:
- 传递参数:可以向事件处理函数传递参数,使用方式如下:
<button v-on:click="handleClick('hello', $event)">Click me</button>
- 事件修饰符:
Vue.js
提供了一些事件修饰符,用于给事件传递特定的含义。例如,.prevent
用于阻止默认行为,.stop
用于停止传播事件,.capture
捕获事件等。例如:
<form v-on:submit.prevent="onSubmit">...</form>
在上述示例中,.prevent
修饰符用于阻止默认的提交事件。
- 按键修饰符:针对于某些特定的键码值,
Vue.js
提供了按键修饰符,如.enter
代表Enter
键,.esc
代表Esc
键等等。
<input v-on:keyup.enter="submit">
在上面的例子中,我们使用了keyup
事件,并且通过.enter
修饰符来监听按下Enter
按键。
总的来说,v-on
是Vue.js
中非常重要的一部分,主要用来监听DOM
事件,响应用户的输入。它提供了丰富的功能,可以使我们更加高效地开发出高性能的响应式Web
应用。