Vue提问二:(组件)
1.全局组件组件怎么注册?data返回的是什么?组件怎么使用?组件的数据是否独立?
2.组件必须要有根元素?组件的命名方式有哪两种?推荐用哪种?
3.局部组件怎么定义?使用范围?
4.vue的调试工具怎么用?
5.props数组的数据是干嘛的?
6.父组件怎么传值到子组件?
7.当子组件标签中number或者布尔 绑定和不绑定的区别?
8.子组件可以通过props直接操作父组件中的数据(数组/对象等)吗?
9.子组件通过自定义事件向父组件传递信息的方式?
10.非父子组件间的传值
11.插槽怎么使用?多个插槽呢?
12.具名插槽怎么定义以及使用?
13.作用域插槽怎么定义和使用?
答案
Vue.component('button-counter', {
data: function () {
return {
count: 0
}
},
template: '',
methods: {
handle: function () {
this.count += 1;
}
}
})
data 返回的是一个函数,每个组件的数据都是独立的
组件摸板不能是两个同级的元素。必须要有两个模板。
props命名规则:分为驼峰式(使用组件的适合,智能在字符串摸板字使用,在普通的标签摸板中使用,必须是短横线的方式)和横线式,推荐短横线的方法
var HelloWorld = {
data: function () {
return {
msg: 'HelloWorld'
}
},
template: '{{msg}}'
};
var vm = new Vue({
el: '#app',
data: {},
components: {
'hello-world': HelloWorld,
}});
局部组件只能在注册他的父组件中使用,别的地方不可以使用
用于接受父组件传值,在组件标签中绑定对应的值。
Vue.component('menu-item', {
props: ['menuTitle'],
template: '{{menuTitle}}'
});
var vm = new Vue({
el: '#app',
data: {
pmsg: '父组件中内容',
ptitle: '动态绑定属性'
}
});
加上绑定的pnum是一个数字类型/布尔类型,不加的是字符串类型
可以,但是不推荐,props传递数据原则:单向数据流
自定义事件$emit("事件名",$event),$event代表传递的值
template: `
`
父组件定义方法
methods: {
handle: function(val){
// 扩大字体大小
this.fontSize += val;
}
}
借助事件中心 来实现
-
创建事件中心对象
var hub = new Vue(); -
在组件中定义监听函数
Vue.component('test-tom', { template: ``, methods: { handle: function(){//触发jerry-event事件 hub.$emit('jerry-event', 2); } }, mounted: function() { // 监听兄弟节点的tom-event事件 hub.$on('tom-event', (val) => { this.num += val; }); } });
Vue.component('alert-box', {
template: `
ERROR:
默认内容
`
});
这里面写的东西都会填充到插槽里面,如果不写则用默认的插槽内容
12
方法一:在模板中给slot添加一个name属性,在使用slot方法的时候加上slot="name名"
标题信息
主要内容1
主要内容2
底部信息信息
Vue.component('base-layout', {
template: `
`
});
方法二:或者使用template标签,使用该标签,template并不会被渲染到页面
标题信息1
标题信息2
主要内容1
主要内容2
底部信息信息1
底部信息信息2
13.详细的解释卡这个博客吧https://www.jianshu.com/p/e10baeff888d
{{slotProps.info.name}}
{{slotProps.info.name}}
Vue.component('fruit-list', {
props: ['list'],
template: `
{{item.name}}
`
});