vue中methods|vue中methods 和 computed 和 watch方法的区别和props
methods 和 computed 和 watch方法的区别
computed是计算属性,是有依赖缓存的,只有在它的依赖发生改变时才会重新计算,这个计算出来的值,是可以直接当成data来用的,在用的时候不需要添加(),computed必须要有一个return值
methods没有依赖缓存,只要发生重新渲染,methods方法总会执行该函数
【vue中methods|vue中methods 和 computed 和 watch方法的区别和props】数据量大,需要缓存的时候用computed,每次确实需要重新-加载,不需要缓存 的时候使用methods
watch是Vue提供的一种更通用的方式来观察和响应Vue实例上的数据变动
尽量使用computed计算属性来监视数据的变化,因为他本身就有这个属性,watch没有computed自动,手动设置代码更复杂
组件
定义一个组建的配置项,一般规范是大驼峰去命名一个组件,实际上还是一个Vue实例
const HelloWorld = {
template: 'hello world'
}
全局注册一个组建 ,就可以在任何地方使用
第一个参数是要使用的标签名字,不管是使用中线还是大驼峰,在使用组建的时候,都要使用小写字母加中划线
第二个参数就是组建的配置项
Vue.component('HelloWorld', HelloWorld)
局部注册一个组件,只有当前Vue实例中才能使用这些组件. 注意这里是components
app
app1
const app = new Vue({
el: '#app',
// 局部注册一个组件,只有当前Vue实例中才能使用这些组件. 注意这里是components
components: {
HelloWorld
},
data: {
msg: 'hello'
}
})
component-data 组件的data必须是一个方法return一个对象,因为这样才能保证每个组件的数据是独立的而不是共享的
const HelloWorld = {
template: '{{msg}}',
data () {
return {
msg: 'hello world'
}
}
}
const app = new Vue({
el: '#app',
components: {
HelloWorld
},
data: {
msg: 'hello'
}
})
props 父组件控制子组件的值
在调用组件的时候通过text属性绑定一个值,在组件内部就可以通过props来接收这个值
通过props来接收调用的时候传过来的值。一旦接收了,就可以直接把props当data用,但是不能直接在内部修改props的值。这是基于单向数据流的原则的。
const MyText = {
template: '{{text}}',
props: ['text']
}
const app = new Vue({
el: '#app',
data: {
text1: 'hello',
text2: 'world',
text3: '!'
},
components: {
MyText
}
})
如果要对传入的props进行类型检查,就需要使用对象的方式来写props
如果要对x进行更多约束,就可以再把这个x写成一个对象,里面可以有默认值,必须这些选项
props: {
x: {
//判断属性
type: Number,
//必传值
required: true
},
y: {
type: Number,
//默认值
default: 0
}
}
}
props坑
const Hello = {
template: '{{helloText}}',
// 由于js的命名又是驼峰类型的,所以在接收的时候又得使用驼峰
props: ['helloText']
}
如果想要通过子组件修改父组件的话,需要早子组件的按钮点击时间上,通过this.$emit触发一个自定义事件
在调用这个组件的时候,就通过 @事件名 这种方式去监听组件内部触发的自定义事件, 当内部有这个自定义事件触发的时候,就会执行app里的onChangeText方法
最终的数据修改在父组件里面
事件总线 兄弟组件,不能直接通信,需要通过事件总线实现通信
事件总线,相当于总指挥中心, 啥都不渲染。只是一个空的vue实例
同样通过$emit触发事件
const bus = new Vue()
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- vue-cli|vue-cli 3.x vue.config.js 配置
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募