Vue学习总结(一)

1.Vue实例

代码示例

<div id="app">
	<h1>{{name}}</h1>
</div>

<script src="../js/vue.js"></script>
<script>
	const app = new Vue({
		el: '#app',		//用于挂载要管理的元素
		data: {	//定义数据
			name: '祖冲之'
		}
	})
</script>

在script标签中new一个Vue实例,其构造参数为一个对象,对象中包含有options和每个option对应的数据,以上代码中的 el: 实例对应的是此Vue实例需要挂载的元素id,**data:**对应的是在元素中用到的数据。
几个常用的options:

  • el:
    • 类型:string|HTMLElement
    • 作用:决定之后Vue实例会管理哪个DOM
  • data:
    • 类型:Object|Function
    • 作用:Vue实例对应的数据对象
  • methods:
    • 类型:{[key:string]:Function}
    • 作用:定义属于Vue的一些方法,可以在其它地方调用,也可以在指令中使用
  • computed:
    • 类型:{[key:string]:Function}
    • 作用:定义属于Vue的一些计算属性,可以在其它地方调用,也可以在指令中使用

methods和computed区别:
methods是方法,每次调用时都会执行方法体,因此调用开销较大。
computed是计算属性,只有第一次调用时会执行方法体计算,再次调用时相当于调用一个变量。

2.插值语法

mustache语法

<h1>{{name}}</h1>
这里的name变量是Vue实例中定义的变量,在Vue实例挂载的DOM中,用{{}}将变量名包起来以显示变量的内容。这就是mustache语法。

v-once

在标签中加入v-once使标签内只显示变量初始定义的值,浏览器控制台对变量值的改变不会得到响应。

<h2>{{message}}</h2>
<!-- v-once只显示初始设置的值,页面中改动不会对其产生影响 -->
<h2 v-once>{{message}}</h2>

假设message中存放的是’hello’,在控制台输入

app.message='hi'会发现第一行的hello变为hi,第二行的hello不变。

v-html

<h1 v-html="url"></h1>
在Vue实例中定义一个变量url: '<a href="http://baidu.com">百度一下</a>'然后在Vue实例挂载的DOM中使用上面的v-html插值操作,元素会将这一变量中的文字以html标签的方式渲染出来。上述实例即渲染出一个百度一下的超链。

v-text

<h2 v-text="url"></h2>
v-text会将标签内容替换为v-text后赋值的内容,上述实例会展示url变量中的文字,即<a href="http://baidu.com">百度一下</a>,而不是形成一个超链。

注意:用了v-text之后,标签内容就不会再显示

<h2 v-text="url">我想加点东西,但是因为前面的v-text指令导致加不了</h2>
以上代码不会显示我想加点东西,但是因为前面的v-text指令导致加不了部分

v-pre

v-pre不使用Vue定义的变量,就显示标签之间的实际内容,不做任何解析,比如:
<h2 v-pre>{{message}},大胡子语法不管用了哦</h2>
网页就不会再将message变量替换为Vue实例中定义的值显示,而是直接显示{{message}}

v-cloak

正常情况下,如果挂载Vue实例的组件中有mustache语句,那么在未完全加载完成时网页中会显示mustache语法的原型(即:{{变量名}}),在相应的标签中加入v-cloak之后就可以指定显示的样式。

<style>
	[v-cloak] {
		display: none;
	}
</style>
<h2 v-cloak>{{message}}</h2>

在加载页面过程中,如果不加v-cloak以上示例会显示{{message}}直到message变量解析成相应的字符串,但是加了之后就可以为它设定初始样式,示例中加载阶段不会显示任何东西。

v-bind

v-bind用来动态的绑定标签中的属性,就是将某个属性和Vue实例中的变量绑定到一起,能够做到变量发生改变时,标签实时响应。

首先我放一个Vue实例

<script>
	const app = new Vue({
		el: '#app',
		data: {
			message: 'i love you!',
			imgURL: 'http://data.17jita.com/attachment/portal/201709/07/154428l66fm4ttcttmtbnt.png',
			baidu: 'http://baidu.com',
			active: 'active',
			isActive: true,
			isLine: true,
			classes: ['active','line'],
			font_size: '50px',
			font_color: 'red',
			style1: {backgroundColor: 'red'},
			style2: {fontSize: '50px'}
		},
		methods: {
			btnClick: function(){
				this.isActive = !this.isActive
			},
			getClasses: function(){
				return {active: this.isActive, line: this.isLine}
			},
			getStyles: function() {
				return {fontSize: this.font_size, color: this.font_color}
			}
		}
	})
</script>
v-bind绑定基本属性
<img v-bind:src="imgURL" alt="" width="300px" /><br>
<a v-bind:href="baidu">百度一下</a>

运行html代码之后会显示一张送别的吉他谱,和一个百度一下的超链接,可以通过在控制台输入以下语句使图片改变app.imgURL='http://data.17jita.com/attachment/portal/201509/15/225301pa658a6c6pvpav80.png'这时候吉他谱会变成朴树版的送别。这就是动态绑定。
其它的像href等属性也都有这样的效果。
v-bind绑定属性时可以采用以下语法糖的形式替换:

<img :src="imgURL" alt="" width="300px" /><br>
<a :href="baidu">百度一下</a>

:属性名的形式。

v-bind动态绑定class属性

对象语法<h2 :class="{active: !isActive, line: isLine}">{{message}}</h2>
其中class绑定的对象中key是类名,value是bool值,value决定了绑定哪个类。

可以用以下代码代替
<h2 :class="getClasses()">{{message}}</h2>,将过多的对象放到一个函数中,然后在动态绑定中调用

数组语法<h2 :class="['active','line']">{{message}}</h2>
其中class动态绑定了一个数组,通过数组的元素增删也可以实现动态效果。

当然数组也可以写在一个变量classes中
<h2 :class="classes">{{message}}</h2>

v-bind动态绑定style属性

这个与class属性一样也分为对象语法数组语法,不同的是对象语法中style的key:value对应的是style中的各个属性和值。这里就不再细说。

计算属性

前文已经讲过计算属性与函数的差别,这里谈谈计算属性的本质

<script>
	const app = new Vue({
		el: '#app',
		data: {
			firstName: 'Lebron',
			lastName: 'James',
			books: [
				{id: 110, name: 'Unix编程艺术', price: 119},
				{id: 111, name: '代码大全', price: 128},
				{id: 112, name: '深入理解计算机原理', price: 110},
				{id: 113, name: '现代操作系统', price: 89}
			]
		},
		computed: {
			fullName: function() {
				return this.firstName + ' ' + this.lastName
			}, 
			totalPrice() {
				let result = 0;
				for( let i = 0; i < this.books.length; i++) {
					result += this.books[i].price
				}
				return result
			}
		},
		methods: {
			getFullName() {
				return this.firstName + ' ' + this.lastName
			}
		}
	})
</script>

上面代码中的fullName实质上是以下代码

fullName: {
	一般情况set方法缺省,不希望别人改变值
	set: function() {
		
	},
	
	get: function() {
		return this.firstName + ' ' + this.lastName
	}
}

即一个包含set函数与get函数的对象,但是习惯上不提供修改计算属性的值,所以就简化成之前的代码中给出的形式,最后甚至把function也直接省略就变成totalPrice那种写法。
这里由起名字也可以看出还有个区别,习惯上计算属性是名词,函数是动词。

### Vue3 学习资料总结与最佳实践 #### 1. 创建 Vue3 项目 Vue3 提供了多种方式来初始化项目,推荐使用 Vite 或 Vue CLI。Vite 是基于 ESBuild 和 Rollup 的新代构建工具,能够显著提高开发体验和性能[^1]。 ```bash npm create vite@latest my-vue-app --template vue cd my-vue-app npm install npm run dev ``` #### 2. Composition API 基础 Composition API 是 Vue3 中的核心改进之,它允许开发者通过逻辑关注点而不是组件生命周期来组织代码。`setup` 方法作为入口,提供了 `reactive`, `ref`, `computed`, `watch` 等核心方法[^1]。 - **Reactive**: 使用 `reactive` 定义响应式对象。 - **Ref**: 对单个值进行响应式处理。 - **Computed**: 计算属性用于派生数据。 - **Watch**: 监听状态的变化并执行副作用。 ```javascript import { reactive, computed, watch } from 'vue'; export default { setup() { const state = reactive({ count: 0 }); const doubleCount = computed(() => state.count * 2); watch( () => state.count, (newVal) => console.log(`count changed to ${newVal}`) ); return { state, doubleCount }; } }; ``` #### 3. 响应式系统的升级 相较于 Vue2,Vue3 的响应式系统更加高效且灵活。通过 Proxy 替代 Object.defineProperty,实现了深层次的对象拦截和支持 Symbol 属性的监听[^1]。 #### 4. 自定义 Hook 函数 为了增强代码复用性和可维护性,Vue3 推荐使用自定义 Hook 来封装通用逻辑。Hook 名称通常以 `use` 开头,并具有清晰的功能描述[^3]。 ```javascript // useCounter.js import { ref, onMounted } from 'vue'; export function useCounter(initialValue = 0) { const counter = ref(initialValue); const increment = () => (counter.value += 1); const decrement = () => (counter.value -= 1); onMounted(() => console.log('Counter initialized')); return { counter, increment, decrement }; } ``` #### 5. Tree-Shaking 技术解析 Tree-shaking 是种优化技术,旨在移除未使用的代码片段,从而减小最终打包文件大小。Vue3 设计之初就考虑到了这需求,通过模块化的架构和静态导入/导出语句的支持,使得 Tree-shaking 成为可能[^2]。 ##### 实战配置建议 - 使用 Webpack 或 Vite 进行深度配置。 - 尽量采用按需加载的方式引入依赖项。 - 利用插件(如 `babel-plugin-component`)实现样式分离。 #### 6. 国际化支持 Vue3 结合 `vue-i18n-next` 插件提供强大的国际化解决方案。借助 Composition API,可以轻松管理多语言环境下的文本翻译[^4]。 ```html <template> <div> <h1>{{ t('auth.login') }}</h1> <button @click="showMessage">{{ t('common.confirm') }}</button> <!-- 切换语言 --> <select v-model="locale"> <option value="zh-cn">中文</option> <option value="en-us">English</option> </select> </div> </template> <script setup lang="ts"> import { useI18n } from 'vue-i18n'; const { t, locale } = useI18n(); function showMessage() { console.log(t('common.save')); } </script> ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值