尚硅谷Vue系列教程学习笔记
Posted wyypersist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尚硅谷Vue系列教程学习笔记相关的知识,希望对你有一定的参考价值。
尚硅谷Vue系列教程学习笔记(5)
- 参考课程:《尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通》
- 参考链接:https://www.bilibili.com/video/BV1Zy4y1K7SH?vd_source=4f4d3466cdc2c5a2539504632c862ce7
- 笔记上传说明:上述课程中共有168节小课,对每10次课的笔记整合之后上传一次。
- 详细代码案例请移步本人gitee仓库: vue_basic案例代码实现
目录
041-v-html指令
使用v-text指令无法解析data数据中存在的str:"h2 你好 /h2 ",其中h2表示h2标签,而使用v-html指令可以实现对上述中str的解析。
也就是说:v-text不支持结构的解析,v-html支持结构的解析。
服务器给的cookie不能跨浏览器使用的。
cookie很重要不能丢失。
如果服务器返回cookie时,没有添加HttpOnly属性,那么就有些cookie可以使用document.cookie获得,然后通过跳转的链接,传入到其他的网站。
一定要在可信的网站上使用v-html,永不要用在用户提交的内容上。
在网站上使用v-html动态渲染时,会导致XSS攻击。
042-v-cloak指令
js阻塞:在页面开头的jS代码如果无法执行,那么后边的html标签和js片段也无法执行。
v-cloak属性会在Vue接管容器的一瞬间被删除掉。
v-cloak需要配合css使用,示例代码如下:
<html>
<head>
<meta charset="UTF-8" />
<title>v-cloak指令</title>
<style>
[v-cloak]
display: none;
</style>
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!--准备好一个容器-->
<div id="root">
<div v-cloak>你好:name</div>
</div>
<script type="text/javascript">
Vue.config.productionTip = false
new Vue(
el:"#root",
data:
name:"test"
)
</script>
</body>
</html>
解析:
上述代码中,引入Vue对象的位置在html标签之后,如果不加v-cloak属性的话,html页面会首先渲染出来,但是出现的是:你好:name,因为此时Vue并没有被引入,但当Vue.js引入之后,会出现成功渲染的结果。因此,使用v-cloak属性配合css代码,指定在Vue.js引入之前,将name先设置为:display:none;这样就可以避免在未引入Vue.js时出现的页面结构呈现给用户的后果。
043-v-once属性
v-once的使用案例:
<h2 v-once>初始化的n值为:n</h2>
<h2>当前的n值为:n</h2>
<button @click="n++">点我n+1</button>
上述代码中,v-once属性设置表示:
1.在节点初次渲染后,就视为动态内容了;
2.以后数据的改变不会影响v-once中的数据改变,可以用于优化性能;
044-v-pre指令
v-pre属性:
1.跳过其所在节点的编译过程;
2.可利用它跳过没有使用指令语法/插值语法等内容的编译过程,加快编译速度;
<!--准备好一个容器-->
<div id="root">
<h2 v-pre>测试v-pre指令</h2>
<h2>当前的n值为:n</h2>
<button @click="n++">点我n+1</button>
</div>
045-自定义指令-函数式
自定义函数何时会被调用?
1.指令和数据成功绑定时会被调用;
2.指令所在的模板被重新解析时会被调用;
自定义指令就是操作DOM中的:属性/内容/事件等。
Vue中自定义指令-函数式案例代码:
//html代码
<div id="root">
<h2>当前n的值为:<span v-text="n"></span></h2>
<h2>放大10倍的n值为:<span v-big="n"></span></h2>
<button @click="n++">点我n+1</button>
</div>
//Vue对象实例中的js代码
new Vue(
el: "#root",
data:
n:1
,
directives:
big(element,binding)
element.innerText = binding.value * 10
// console.log(element, binding.value) //这里的a表示真实DOM对象,这里的b表示
)
046-对象式,
对象式案例:实现在页面加载出input输入框时,input输入框中显示n的值,且input输入框获得输入焦点:
//html代码
<div id="root">
<h2>当前n的值为:<span v-text="n"></span></h2>
<h2>放大10倍的n值为:<span v-big="n"></span></h2>
<button @click="n++">点我n+1</button>
<!-- <input type="text" v-bind:value="n"> -->
<input type="text" v-fbind:value="n">
</div>
//Vue中js代码
new Vue(
el: "#root",
data:
n:1
,
directives:
big(element,binding)
element.innerText = binding.value * 10
// console.log(element, binding.value) //这里的a表示真实DOM对象,这里的b表示
,
// fbind(element, binding)//fbind使用这种写法时,不会直接在初次加载页面时就获取焦点
// element.value = binding.value
// element.focus()
//
fbind:
//f指令与页面绑定之后调用
bind(element, binding)
element.value = binding.value
,
//指令所在元素被插入页面时调用
inserted(element, binding)
element.focus()
,
//指令所在模板被重新解析时调用
update(element, binding)
element.value = binding.value
element.focus()
)
上述实现fbind对象式中,使用了三个函数:bind()/inserted()/update(),这三个函数有不同的调用时机(具体见上述代码)。
047-自定义指令-总结
自定义指令的最完整写法:
//html代码
<input type="text" v-big-number:value="n">
//js代码
directives:
//最完整写法
'big-number':function(element, binding)
重点:对象里面的key出现了’-',就不可以使用定义自定义指令函数的简写形式,需要写为完整的形式。
所有指令相关的函数中的this都是window对象。
在一个Vue对象中的所有指令只能在当前Vue对象中使用,而在其他的Vue对象中无法使用。
Vue中定义全局自定义指令的代码:
Vue.directive('fbind',
bind()
,
inserted()
,
update()
)
重点:自定义指令命名时,不能使用驼峰命名法,而是需要使用’-'将多个单词隔开。
048-引出生命周期
Vue中提供的mounted方法可以在Vue完成DOM解析并将初始的真实DOM放入页面之后调用。
使用案例:
//html代码
<div id="root">
<h2 :style="opacity">欢迎学习Vue技术</h2>
</div>
//js代码
const vm = new Vue(
el:"#root",
data:
opacity:1
,
// methods: //methods无法实现渐变功能
// changeOpacity()
// //设置内部定时器
// setInterval(() =>
// this.opacity -= 0.01
// if(this.opacity <= 0)
// this.opacity = 1
//
// ,16)
//
// ,
//挂载函数
mounted()
//设置内部定时器
setInterval(() =>
this.opacity -= 0.01
if(this.opacity <= 0)
this.opacity = 1
,16)
,
)
Vue中提供的生命周期函数不可以更改名字,但是程序员可以在其中实现一些特定的逻辑。
生命周期函数中的this指定的是vm对象和组件实例对象。
049-挂载过程
在Vue初始化期间,创建虚拟DOM过程中,如果没有指定el绑定的组件,那么在调用vm.$mount(‘#root’)之后,Vue的生命周期才得以继续进行。
Vue中如果写了template属性,那么其中的html标签会完全替换掉el绑定的html组件中的所有标签元素。
总结一下Vue的生命周期,以及详细地分析:
<script type="text/javascript">
Vue.config.productionTip = false
const vm = new Vue(
el:"#root",
data:
n:1
,
methods:
add()
this.n ++
,
beforeCreate()
console.log("beforeCreate")
// console.log(this)
// debugger;
,
created()
console.log('created')
// console.log(this)
// debugger;
,
beforeMount() //此时页面模板为还没有被Vue编译的结构,其中的函数等动作均无效
//此时对DOM组件的操作均为无效的
console.log('beforeMount')
console.log(this)
// debugger;
,
mounted() //到这里,Vue的初始化过程结束
//此时对DOM的操作是可以实现的,但是尽可能避免操作DOM,在这里一般进行如下动作:
//开启定时器,发送网络请求,订阅消息,绑定自定义事件等初始化操作
console.log('mounted')
// console.log(this)
debugger;
,
)
</script>
050-更新流程
Vue中不能使用<template>
标签作为template属性的根标签,因为使用<template>
时,其中可能包含多个nodes节点组件。
Vue中的更新流程代码和详细解释:
beforeUpdate() //数据是新的,但是页面中没有更改,数据和页面显示不同步
console.log("beforeUpdate")
console.log(this)
// debugger;
,
updated() //此时,数据是新的,页面也是新的
console.log("updated")
console.log(this.n)
,
//截止到2022.8.17晚上21:42止
以上是关于尚硅谷Vue系列教程学习笔记的主要内容,如果未能解决你的问题,请参考以下文章