Vue知识点!!
Posted 橘子笔录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue知识点!!相关的知识,希望对你有一定的参考价值。
一、vue的二大特点?
1.数据的双向绑定
2.虚拟DOM
一、vue的两个核心是什么?
1.数据驱动
2. 组件
二、vue-show和v-if的区别?
1.v-show:操作的是元素的display属性,block或none
2.v-if:按照条件是否渲染
三、对比computed与watch之间的区别?
1.computed是一个计算属性,是实时响应的,只要data中的属性发生了 变化那么就会触发computed,计算属 性是基于属性的依赖进行缓存的 而computed调用的时候是不需要加()
2.watch属性监听,watch用来监听属性的变化,当值发生变化的时候 来执行特定的函数,watch监听属性的时候 会有2个参数newVal和 oldVal 一个新值一个旧值
四、vue中的过滤器(filter)
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。 过滤器 可以用在两个地方:双花括号插值和 v-bind
表达式 过滤器应 该被 添加在 javascript 表达式的尾部,由“管道”符号指示:
<!-- 在双花括号中 -->
{{ message | capitalize }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
1.全局过滤器
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
// ...
})
2.局部过滤器
new Vue({
el:"#warp",
data:{
},
filters:{
// 过滤器。过滤的是你的数据。过滤器分为全局与局部过滤器两种
// 用在{{}}当中以及属性绑定值当中
// 用法:在要过滤的数据右侧添加一条竖线,在竖线右侧加上你的过滤器名字
currency(v,n=2){// currency 过滤器的名字
// 第一个参数是你要过滤的值.其它参数是使用该过滤器时额外传递的参数。
console.log(v,n);
return "$"+v.toFixed(n);// 返回的内容,即是你过滤以后的结果
}
}
})
五、vue中自定义指令如何使用?
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
如果想注册局部指令,组件中也接受一个 directives
的选项:
directives: {
focus: {
// 指令的定义
inserted: function (el) {
el.focus()
}
}
}
六、vue组件传值?
1.父向子传值是通过属性来传递的。子组件通过props来进行接收
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="lib/vue.js"></script>
</head>
<body>
<div id="warp">
<one :a="age"></one>
</div>
</body>
<script>
new Vue({
el:"#warp",
data:{
age:12
},
components:{
// 父向子传值是通过属性来传递的。
one:{
props:["a"],// 接收属性a
template:`<div><input type="button" :value="a" @click="a++">one组件{{a}}</div>`
}
}
})
</script>
</html>
2.子向父通过自定义事件来进行传值
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id='app'>
<ll></ll>
</div>
<template id='hmm'>
<div>
韩梅梅组件1
<button @click='hmmClick'> show/show</button>
</div>
</template>
<template id='ll'>
<div>
<hmm @custom='showDiv'></hmm>
<hr>
<hr>
李雷组件2
<div v-if='show'>
这里是测试div
</div>
</div>
</template>
<script>
Vue.component('hmm',{
template:'#hmm',
methods:{
hmmClick(){
console.log(this)
this.$emit('custom')
}
}
})
Vue.component('ll',{
template:"#ll",
data(){
return{
show:true
}
},
methods: {
showDiv(){
this.show=!this.show
}
},
})
new Vue({
el:'#app'
})
</script>
<!--
自定义事件 子到父 子组件控制父组件
1. 父组件 div显示隐藏
2. 子组件 按钮
通过@声明自定义事件 就可以在当前对象下的 events 找到自定义事件
通过this.$emit('自定义事件的名字触发')
-->
</body>
</html>
3.非父子传值
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="vue.js"></script>
</head>
<body>
<div id='app'>
<hmm></hmm>
<hr>
<ll></ll>
</div>
<template id='hmm'>
<div>
<!-- 韩梅梅组件1 -->
<button @click='hmmClick'> show/show</button>
</div>
</template>
<template id='ll'>
<div>
<!-- 李雷组件2 -->
<div v-if='show'>
这里是测试div
</div>
</div>
</template>
<script>
let ang=new Vue()
Vue.component('hmm',{
template:'#hmm',
methods:{
hmmClick(){
/* console.log('点到我了')
console.log(ang) */
ang.$emit('toggle')
}
}
})
Vue.component('ll',{
template:"#ll",
data(){
return{
show:true
}
},
methods:{
divShow(){
this.show=!this.show
}
},
mounted() {
ang.$on('toggle',this.divShow)
}
})
new Vue({
el:'#app'
})
</script>
<!--
2个组件 组件1按钮 控制组件2的div显示隐藏 非嵌套关系
组件2 控制显示隐藏函数
组件1 触发
-->
</body>
</html>
七、vue的生命周期?
1.什么是生命周期?
Vue实例从创建到销毁的过程,就是生命周期。从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。
2.vue生命周期的作用是什么?
它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。
3.vue生命周期总共有几个阶段?
它可以总共分为4个阶段:创建, 挂载,更新,销毁。
4.第一次页面加载会触发哪几个钩子?
会触发下面这几个beforeCreate, created, beforeMount, mounted
5.DOM 渲染在 哪个周期中就已经完成?
DOM 渲染在 mounted 中就已经完成了。
八、vue中的单向数据流的理解?
数据从父级组件传递给子组件,只能单向绑定,子组件不能直接修改从父级传递过来的数据,数据只能从一个方向来修改状态,如果父组件给N个子组件进行了数据传递。那么某一个子组件中修改了这个数 据,那么就会导致其他组件的数据也会发生改变。因此数据只能从一个方向来修改状态
九、请说一下什么是动态组件,如何使用,以及keep-alive的作用?
动态组件:让多个组件使用同一个挂载点,并动态进行切换。这就是动态组件
通过保留<component></component> 元素,动态的绑定它的is特性,可以实现动态组件
keep-alive 包裹动态组件(组件)时,会缓存不活动的组件实例,而不是销毁它们组件切换调用的时候本身会被销毁掉的,只要加上keep-alive进行包裹,就不会被销毁,而是被缓存起来, 下一次使用的时候直接从缓存中调用
十、vue中solt的使用方式,以及匿名插槽 命名插槽 插槽作用域?
1.当组件当做标签进行使用的时候,用slot可以用来接受组件标签包裹的内容,当给solt标签添加name属性的时候,可以调换响应的位置
十一、组件中的data为什么是函数而不是对象?
1.如果是对象,会导致数据发生引用,因为对象是引用类型,而当data为函数时,每次 data执行完毕都会返回一个新对象,不会被引用
十二、什么是路由?
十三、路由跳转的方式有哪几种?
1.a标签进行跳转。例如:<a href="#/home">首页</a>
2.router-link进行跳转例如:<router-link to="/home">首页 </router-link>
3.编程式路由 例如:this.$router.push()
十四、路由传值的方式有哪几种
1、path路径属性传值。例如:path:"/home/:id/name"; 接受的时候通过 this.$route.params
2、query传值。因为在url中?后面的参数不会被解析,因此我们可以通过query进行传值。接受的时候通过 this.$route.query
3、编程式导航 this.$router.push({path:"/home",query:{}});
4、路由解耦。在配置路由的时候添加props属性为true,在需要接受参数的组件页面通过props进行接受
十五、请说出路由配置项常用的属性及作用
path : 跳转路径
component : 路径相对于的组件
name:命名路由
children:子路由的配置参数(路由嵌套)
alias:别名
props:路由解耦
redirect : 重定向路由
十六、编程式导航使用的方法以及常用的方法
路由跳转 : this.$router.push()
路由替换 : this.$router.replace()
后退: this.$router.back()
前进 :this.$router.forward()
十七、如何重定向路由?
通过配置路由项中的redirect进行重定向
十八、什么是路由守卫?路由的钩子函数有哪些?分别说出使用的场景,及用法
1.什么是路由守卫?路由跳转前后做的一些验证
2. 路由常见的钩子函数:beforeRouterEnter、beforeRouterUpdate、beforeRouterLeave
3.使用场景:beforeRouterEnter:当路由进入之前(to,from,next):登陆验证、热力图的记录
beforeRouterUpdate:当路由进行更新的时候。如果当前路由发生了变化,但是当前组件没有经历创建和销毁的时候,如果我们需要接收路由传递过来的数据时我们就需要用到了beforeRouterUpdate
beforeRouterLeave:路由离开的时候。信息没有填写完成的时候,如答题系统、支付
十九、双向数据绑定的原理?
vue实现双向数据绑定的原理就是利用了Object.defineProperty()这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实的。Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。
二十、Vue中如何解决跨域问题,有什么确定,如何改进。
就是在config下的index.js中配置相关代码。
module.exports = {
devServer:{
host:"127.0.0.1",
port:8081,
open:true,
// cnpm install http-proxy-middleware -D
// 代理设置完之后,要重启。
// 代理只是在开发环境当中起效果。
proxy:{
"/ele":{// 当你访问的地址是以/ele开头的话,就会使用该代理服务器
target:"http://127.0.0.1",// 所要代理的服务器是谁 http://127.0.0.1/login
changeOrigin:true,// 是否允许代理
pathRewrite:{
"^/ele":""
}
}
}
}
}
二十一、vue.set()函数有什么用?
当vue的data里面声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。set用法可以实现改变数据渲染在网页上
二十二、vue. nextTick()函数作用?
在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法获取更新后的DOM。
二十三、列举vuex中的辅助函数
...mapStates([xxxx])
...mapGetters([xxx])
...mapmutations([xxxxx])
...mapAcyions([xxx])
二十四、简述vuex的数据传递流程?
当组件需要修改state中的数据的时候必须通过dispatch来触发actions里面的方法,actions每一个方法里面都会有一个commit方法,用来触发mutations里面的方法,mutations用来修改state中的数据,当mutations里面的方法触发的时候就会发生改变,因为数据是响应式的因此组件中的数据也会发生改变
二十五、vuex有哪几种属性?
state、actions、mutations、getters、module
以上是关于Vue知识点!!的主要内容,如果未能解决你的问题,请参考以下文章