Vue基础知识概括

Posted GeorgeLin98

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue基础知识概括相关的知识,希望对你有一定的参考价值。

Vue基础知识概括

Vue简介

vue.js简介:

  • Vue (读音 /vjuː/,类似于 view),不要读错。
  • Vue是一个渐进式的框架,什么是渐进式的呢?
    ①渐进式意味着你可以将Vue作为你应用的一部分嵌入其中,带来更丰富的交互体验。
    ②或者如果你希望将更多的业务逻辑使用Vue实现,那么Vue的核心库以及其生态系统。
    ③比如Core+Vue-router+Vuex,也可以满足你各种各样的需求。
  • Vue有很多特点和Web开发中常见的高级功能 解耦视图和数据:
    ①可复用的组件
    ②前端路由技术
    ③状态管理
    ④虚拟DOM
  • 学习Vuejs的前提?
    ①从零学习Vue开发,并不需要你具备其他类似于Angular、React,甚至是jQuery的经验。
    但是你需要具备一定的html、CSS、javascript基础。

Vue.js安装:

  • 使用一个框架,我们第一步要做什么呢?安装下载它。安装Vue的方式有很多:
方式一:直接CDN引入
你可以选择引入开发环境版本还是生产环境版本
<!-- 开发环境版本,包含了有帮助的命令行警告 --> 
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

方式二:下载和引入
开发环境 https://vuejs.org/js/vue.js 
生产环境 https://vuejs.org/js/vue.min.js

方式三:NPM安装
后续通过webpack和CLI的使用,我们使用该方式。

Vue中的MVVM:

  • 什么是MVVM呢?
    ①View层:
    <1>视图层
    <2>在我们前端开发中,通常就是DOM层。
    <3>主要的作用是给用户展示各种信息。
    ②Model层:
    <1>数据层
    <2>数据可能是我们固定的死数据,更多的是来自我们服务器,从网络上请求下来的数据。
    <3>在我们计数器的案例中,就是后面抽取出来的obj,当然,里面的数据可能没有这么简单。
    ③VueModel层:
    <1>视图模型层
    <2>视图模型层是View和Model沟通的桥梁。
    <3>一方面它实现了Data Binding,也就是数据绑定,将Model的改变实时的反应到View中
    <4>另一方面它实现了DOM Listener,也就是DOM监听,当DOM发生一些事件(点击、滚动、touch等)时,可以监听到,并在需要的情况下改变对应的Data。
  • 我们直接来看Vue的MVVM:

Vue的生命周期:


Vue入门:

  • 创建Vue对象的时候,传入了一些options:
    ①中包含了el属性:该属性决定了这个Vue对象挂载到哪一个元素上,很明显,我们这里是挂载到了id为app的元素上
    ②中包含了data属性:该属性中通常会存储一些数据
<div id="app">
	<h2>hello name</h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			name: 'Hello World',
		
	)
</script>
  • 目前掌握这些选项:
    ①el:
    <1>类型:string | HTMLElement
    <2>作用:决定之后Vue实例会管理哪一个DOM。
    ②data:
    <1>类型:Object | Function (组件当中data必须是一个函数
    <2>作用:Vue实例对应的数据对象。
    ③methods:
    <1>类型: [key: string]: Function
    <2>作用:定义属于Vue的一些方法,可以在其他地方调用,也可以在指令中使用。

Mustache模板语法:

  • 如何将data中的文本数据,插入到HTML中呢?
    ①我们已经学习过了,可以通过Mustache语法(也就是双大括号)。
    ②Mustache: 胡子/胡须.
<div id="app">
	<h2>hello name</h2>
	<h2>firstName lastName</h2>
	<h2>counter * 2</h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			name: 'Hello World',
			firstName:'george',
			lastName:'lin',
			counter:100
		
	)
</script>

v-once指令:

  • 但是在某些情况下,我们可能不希望界面随意的跟随改变。这个时候我们就可以使用一个Vue的指令。
  • v-once:
    ①该指令后面不需要跟任何表达式(比如之前的v-for后面是由跟表达式的)
    ②该指令表示元素和组件(组件后面才会学习)只渲染一次,不会随着数据的改变而改变。
<div id="app">
	<h2 v-once>message</h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			message: 'Hello World'
		
	)
</script>

v-html指令:

  • 某些情况下,我们从服务器请求到的数据本身就是一个HTML代码,如果我们直接通过来输出,会将HTML代码也一起输出。但是我们可能希望的是按照HTML格式进行解析,并且显示对应的内容。
  • 如果我们希望解析出HTML展示,可以使用v-html指令。
    ①该指令后面往往会跟上一个string类型
    ②会将string的html解析出来并且进行渲染
<div id="app">
	<h2 v-html="link"></h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			link: '<a href="http://www.baidu.com">百度一下<a/>'
		
	)
</script>

v-text指令:

  • v-text作用和Mustache比较相似:都是用于将数据显示在界面中
  • v-text通常情况下,接受一个string类型。
<div id="app">
	<h2 v-text="message"></h2>
	<h2>message</h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			message: 'hello world'
		
	)
</script>

v-pre指令:

  • v-pre用于跳过这个元素和它子元素的编译过程,用于显示原本的Mustache语法。
  • 比如下面的代码:
    ①第一个h2元素中的内容会被编译解析出来对应的内容
    ②第二个h2元素中会直接显示message
<div id="app">
	<h2>message</h2>
	<h2 v-pre>message</h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			message: 'hello world'
		
	)
</script>

v-cloak指令:

  • 在某些情况下,我们浏览器可能会直接显然出未编译的Mustache标签。
  • 加了cloak斗篷后,再加上对于style,在未编译前浏览器即不会显示。
<div id="app">
	<h2 v-cloak>hello message</h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			message: 'world'
		
	)
</script>

<style>
	[v-cloak] 
		display:none;

</style>

v-bind指令:

  • 前面我们学习的指令主要作用是将值插入到我们模板的内容当中。 但是,除了内容需要动态来决定外,某些属性我们也希望动态来绑定。比如动态绑定a元素的href属性 比如动态绑定img元素的src属性 这个时候,我们可以使用v-bind指令。
  • v-bind用于绑定一个或多个属性值,或者向另一个组件传递props值(这个学到组件时再介绍)
<div id="app">
	<a v-bind:href="link">vuejs官网</a>
	<img v-bind:src='logoURL' alt="">
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			logoURL: 'https://vuejs.org/images/logo.png',
			link:'https://vuejs.org/'
		
	)
</script>
  • v-bind有一个对应的语法糖,也就是简写方式 在开发中,我们通常会使用语法糖的形式,因为这样更加简洁。
<div id="app">
	<a :href="link">vuejs官网</a>
	<img :src='logoURL' alt="">
</div>
  • 注意:没有参数时,可以绑定一个包含键值对的对象
<div v-bind="class:'box',[key]:'my-box'"></div>

【结果】
<div id="app">
	<div id="my-box" class="box"></div>
</div>

const vm = new Vue(
    el:"#app",
    data:
        imageSrc:"./pic1.jpg",
        fileName:"pic1.jpg",
        key: "id",
        value: "btn"
    
)
  • v-bind绑定class:
    ①绑定class有两种方式:
    <1>对象语法
    <2>数组语法
一、绑定方式:对象语法:

用法一:直接通过绑定一个类
<h2 :class="'active': isActive">Hello World</h2>

用法二:也可以通过判断,传入多个值
<h2 :class="'active': isActive, 'line': isLine">Hello World</h2>

用法三:和普通的类同时存在,并不冲突
注:如果isActive和isLine都为true,那么会有title/active/line三个类
<h2 class="title" :class="'active': isActive, 'line': isLine">Hello World</h2>

用法四:如果过于复杂,可以放在一个methods或者computed中
注:classes是一个计算属性
<h2 class="title" :class="classes">Hello World</h2>

二、绑定方式:数组语法:

用法一:直接通过[]绑定一个类
<h2 :class="['active']">Hello World</h2>

用法二:也可以传入多个值
<h2 :class=“[‘active’, 'line']">Hello World</h2>

用法三:和普通的类同时存在,并不冲突
注:会有title/active/line三个类
<h2 class="title" :class=“[‘active’, 'line']">Hello World</h2>

用法四:如果过于复杂,可以放在一个methods或者computed中
注:classes是一个计算属性
<h2 class="title" :class="classes">Hello World</h2>
  • v-bind绑定style:
    ①我们可以利用v-bind:style来绑定一些CSS内联样式。
    ②在写CSS属性名的时候,比如font-size
    <1>我们可以使用驼峰式 (camelCase) fontSize
    <2>或短横线分隔 (kebab-case,记得用单引号括起来) ‘font-size’
    ③绑定class有两种方式:
    <1>对象语法
    <2>数组语法
绑定方式一:对象语法:

:style="color: currentColor, fontSize: fontSize + 'px'"
style后面跟的是一个对象类型
对象的key是CSS属性名称
对象的value是具体赋的值,值可以来自于data中的属性

绑定方式二:数组语法:

<div v-bind:style="[baseStyles, overridingStyles]"></div>
style后面跟的是一个数组类型
多个值以,分割即可
  • 可以用方括号括起来的JavaScript表达式作为一个指令的参数:
//当attributeName=href时,等同于上面的v-bind:href="url"
<a v-bind : [attributeName]="url"> ... < / a>

什么是计算属性?

  • 我们知道,在模板中可以直接通过插值语法显示一些data中的数据。但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示。比如我们有firstName和lastName两个变量,我们需要显示完整的名称。但是如果多个地方都需要显示完整的名称,我们就需要写多个firstName lastName。
  • 每个计算属性都包含一个getter和一个setter。在上面的例子中,我们只是使用getter来读取。在某些情况下,你也可以提供一个setter方法(不常用)。
<div id="app">
	<h2>fullName</h2>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			name: 'Hello World',
			firstName:'george',
			lastName:'lin',
			counter:100
		,
		computed:
			fullName()
				return this.firstName + ' ' + this.lastName
			,
			fullName2:
				get()
					return this.firstName + ' ' + this.lastName
				,
				set(newValue)
					const names = newValue.split(' ');
					this.firstName = names[0];
					this.lastName = names[1];
				
			
		
	)
</script>
  • 我们可能会考虑这样的一个问题:
    ①methods和computed看起来都可以实现我们的功能,
    ②那么为什么还要多一个计算属性这个东西呢?
    ③原因:计算属性会进行缓存,如果多次使用时,计算属性只会调用一次。

侦听器watch():

  • 虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch选项提供了一个更通用的方法来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
  • 方法名必须是属性名,方法的参数第一个是改变后的新值,第二个是改变前的旧值。
<div id="watch-example">
  <p>
    Ask a yes/no question:
    <input v-model="question" />
  </p>
  <p> answer </p>
</div>

<!-- 因为 AJAX 库和通用工具的生态已经相当丰富,Vue 核心代码没有重复 -->
<!-- 提供这些功能以保持精简。这也可以让你自由选择自己更熟悉的工具。 -->
<script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"></script>
<script>
  const watchExampleVM = Vue.createApp(
    data() 
      return 
        question: '',
        answer: 'Questions usually contain a question mark. ;-)'
      
    ,
    watch: 
      // 每当 question 发生变化时,该函数将会执行
      question(newQuestion, oldQuestion) 
        if (newQuestion.indexOf('?') > -1) 
          this.getAnswer()
        
      
    ,
    methods: 
      getAnswer() 
        this.answer = 'Thinking...'
        axios
          .get('https://yesno.wtf/api')
          .then(response => 
            this.answer = response.data.answer
          )
          .catch(error => 
            this.answer = 'Error! Could not reach the API. ' + error
          )
      
    
  ).mount('#watch-example')
</script>

事件监听与v-on指令:

  • 在前端开发中,我们需要经常和用于交互。这个时候,我们就必须监听用户发生的时间,比如点击、拖拽、键盘事件等等,在Vue中如何监听事件呢?使用v-on指令。
  • 注:v-on也有对应的语法糖:v-on:click可以写成@click。
  • 当通过methods中定义方法,以供@click调用时,需要注意参数问题:
    如果该方法不需要额外参数,那么方法后的()可以不添加。但是注意:如果方法本身中有一个参数,那么会默认将原生事件event参数传递进去。
    如果需要同时传入某个参数,同时需要event时,可以通过$event传入事件。
  • v-on修饰符:在某些情况下,我们拿到event的目的可能是进行一些事件处理。Vue提供了修饰符来帮助我们方便的处理一些事件:
    ①.stop - 调用 event.stopPropagation() - 停止冒泡。
    ②.prevent - 调用 event.preventDefault() - 阻止默认行为。
    ③.keyCode | keyAlias - 只当事件是从特定键触发时才触发回调。
    ④.native - 监听组件根元素的原生事件。
    ⑤.once - 只触发一次回调。
<div id="app">
	<button v-on:click="counter++">按钮点击1</buton>
	<button @click="btnClick">按钮点击2</buton>
</div>
<script>
	let vm = new Vue(
		el:"app",
		data:
			counter: 0,
		,
		methods:
			btnClick():
				this.counter++
			
		
	)
</script>
<div id="app">
	<h2>点击次数:counter</h2>
	<button @click="handleAdd">+1</buton>
	<button @click="handleAdd(10,$event)">+10</buton>
</div>
<script>以上是关于Vue基础知识概括的主要内容,如果未能解决你的问题,请参考以下文章

Vue基础知识概括

Vue高级知识概括

Vue详解知识概括

Vue高级知识概括

Vue Router 导航守卫快速了解与上手应用

Vue扩展知识概括