1.绑定style样式
<template><div><button @click="increaseFontSize">增大字体</button><div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">动态样式示例</div></div>
</template><script>
export default {data() {return {activeColor: 'blue',fontSize: 16};},methods: {increaseFontSize() {this.fontSize += 2; // 增加字体大小}}
};
</script>
2.条件渲染
<template><div><button @click="toggle">点击切换显示</button><p v-if="isVisible">这是一个可见的段落。</p><p v-else>段落隐藏了。</p></div>
</template><script>
export default {data() {return {isVisible: true};},methods: {toggle() {this.isVisible = !this.isVisible; // 切换可见性}}
};
</script>
3.列表渲染
<template><ul><li v-for="item in items" :key="item.id">{{ item.text }}</li></ul>
</template><script>
export default {data() {return {items: [{ id: 1, text: 'Item 1' },{ id: 2, text: 'Item 2' },{ id: 3, text: 'Item 3' }]};}
};
</script>
4.key作用与原理(未完成)
key
是 Vue 中用于跟踪节点身份的特殊属性,在进行虚拟 DOM 更新时用于优化:
作用:帮助 Vue 更准确地识别节点,提高渲染性能。
原理:通过 key
,Vue 可以精确地复用或者重新创建元素,避免不必要的DOM操作。
5.列表过滤
<template><ul><li v-for="item in filteredList" :key="item.id">{{ item.text }}</li></ul>
</template><script>
export default {data() {return {items: [{ id: 1, text: 'Item 1', visible: true },{ id: 2, text: 'Item 2', visible: false },{ id: 3, text: 'Item 3', visible: true }]};},computed: {filteredList() {return this.items.filter(item => item.visible); // 只返回可见的项}}
};
</script>
6.列表排序
<template><ul><li v-for="item in sortedList" :key="item.id">{{ item.text }}: {{ item.value }}</li></ul>
</template><script>
export default {data() {return {items: [{ id: 1, text: 'Item 1', value: 50 },{ id: 2, text: 'Item 2', value: 10 },{ id: 3, text: 'Item 3', value: 30 }]};},computed: {sortedList() {return this.items.slice().sort((a, b) => a.value - b.value); // 按值排序}}
};
</script>
slice,复制。不在原来的数组修改。sort排序函数。
sort()
方法: 用于对数组进行排序。sort
方法接受一个比较函数。- 比较函数
(a, b) => a.value - b.value
: 这个函数接受两个参数,分别是数组中的两个元素:- 如果返回值小于 0,则
a
会被排在b
之前。 - 如果返回值大于 0,则
b
会被排在a
之前。 - 如果返回值等于 0,则原顺序不变。
- 在这个例子中,按照每个对象的
value
属性进行升序排序。
- 如果返回值小于 0,则
7.监测数据的原理
1)数据劫持
Vue 通过 Object.defineProperty
方法实现对数据的劫持。它会将 Vue 实例中的数据属性转换为 getter 和 setter,以便对数据的读写进行监控。
- 获取数据(getter)时,Vue 会将依赖该数据的组件记录下来。
- 设置数据(setter)时,Vue 会通知所有依赖该数据的组件重新渲染。
2) 依赖收集
在数据读取时,Vue 会记录哪些 watcher 依赖了这个数据(即哪些视图依赖了这个数据)。这个过程称为依赖收集。在 Vue 的实现中,watcher 是一个用于通知 Vue 进行视图更新的类。
3)响应式系统
当数据变化时,触发 setter,会调用相应的 watcher 的 update
方法,通知 Vue 进行视图更新。Vue 通过 虚拟 DOM 更新只改动那些有变化的部分,从而提高性能。
4)Vue 3 的 Proxy 机制
在 Vue 3 中,Vue 替换了 Object.defineProperty
,使用了 Proxy
进行数据劫持。
// Vue 2.x 代码示例
new Vue({data() {return {message: 'Hello Vue!'};},created() {console.log(this.message); // 触发 getter},methods: {updateMessage(newMessage) {this.message = newMessage; // 触发 setter,更新视图}}
});
8.过滤器
<template><div>{{ message | capitalize }}</div>
</template><script>
export default {data() {return {message: 'hello world'};},filters: {capitalize(value) {if (!value) return '';return value.charAt(0).toUpperCase() + value.slice(1);}}
};
</script>
-
定义过滤器:
filters
:这是一个 Vue 组件的选项,定义了可以在模板中使用的过滤器。capitalize
:过滤器的名称,可以在模板中用| capitalize
调用。
-
参数
value
:- 这个参数是传入过滤器的值,通常是一个字符串。
-
检查
value
:if (!value) return '';
:如果value
是 false(例如null
、undefined
或空字符串),则返回一个空字符串。这防止后续代码在处理undefined
或null
时出错。
-
字符串处理:
value.charAt(0).toUpperCase()
:获取字符串的第一个字符并将其转换为大写。value.slice(1)
:获取字符串从第二个字符开始的部分。- 将这两个部分拼接起来,形成处理后的字符串。
9.各种指令
1.v-text
替代{{ }}
<template><div v-text="message"></div>
</template><script>
export default {data() {return {message: 'Hello, Vue!'};}
};
</script>
2.v-html
v-html
用于更新元素的 innerHTML
,能解析 HTML 字符串。
<template><div v-html="htmlContent"></div>
</template><script>
export default {data() {return {htmlContent: '<p>This is <strong>HTML</strong> content</p>'};}
};
</script>
3.v-ones
v-once
用于只渲染元素和组件一次,之后的更新不再影响这些元素。
<template><div v-once>{{ message }}</div>
</template><script>
export default {data() {return {message: 'This will not change even if the data updates'};}
};
</script>