关于自定义组件的问题

来源:2-17 自定义组件(下)

soso_crazy

2019-07-18 16:10:46

<template>

<p :style="{ color: col }">{{ time }}</p>

</template>


<script>

export default {

data() {

return {

time: 10

};

},

mounted() {

let t = setInterval(() => {

this.time--;

if (this.time == 0) {

clearInterval(t);

this.$emit("end");

}

}, 1000);

},

props: {

col: {

type: String,

default: "#000"

}

}

};

</script>


  1. 所有的html组件都要放在template标签内吗?

  2. this指向的是谁?

  3. $emit的作用是什么?this.$emit(end) 括号里的end是在使用组件时 @end一致吗?意思是$emit(ending) 那么@ending的意思吗?

  4. props的作用是什么?

  5. 如果col:{} 不写type:string可以吗?这是判断col传过来的值一定要是字符串的意思吗?

写回答

1回答

好帮手慕夭夭

2019-07-18

你好同学,解答如下:

1.没错,所以的html组件都要放在template标签中,并且,template只能包含一个根元素,所以一般都会嵌套一个整体的大div,然后标签和组件都要放在div中。

http://img.mukewang.com/climg/5d30496b00013fd204020120.jpg

2.this的情况需要具体代码具体分析,像同学提供的代码中,定时器里面是箭头函数,箭头函数函数体内的this,就是定义时所在的对象,即指向vue实例对象。因为time是vue实例上的数据,所以通过this.time获取这个数据。

自己可以输出看一下哦(因为定时器不断改为time值,time值会变化)

http://img.mukewang.com/climg/5d304af800015cf602960342.jpg

3.$emit作用是让子组件触发父组件的自定义事件。父组件定义了一个方法。

http://img.mukewang.com/climg/5d304d1d0001320104580106.jpg

想要在子组件触发这个方法,就要在调用子组件的位置传递一个自定义事件end,这个end事件是我们自己任意起的,所以叫做自定义事件。事件要执行的就是ending()方法。

http://img.mukewang.com/climg/5d304d370001b9df05410068.jpg

子组件就是使用$emit()来触发从父组件传递的自定义事件end,括号中填写的就是事件名,与@end中end一致。这里没有@ending哦

http://img.mukewang.com/climg/5d304dea0001370603420055.jpg

4.props接收父组件数据。即当父组件给子组件传递数据的时候,子组件使用props接收。例如如下传递了一个col属性

http://img.mukewang.com/climg/5d304ee90001b0c204710068.jpg

子组件就要在props中接收。可以规定要传递什么类型的,并且可以设置默认值。在props中接收这个数据后,子组件就可以使用啦

http://img.mukewang.com/climg/5d304f220001277e03540121.jpg

5. 这里不写也没有影响。不过因为标签中设置的属性都是字符串类型,所以规定一下它传递字符串类型的更好哦。

祝学习愉快,望采纳。

0

0 学习 · 10739 问题

查看课程