🤟🏼 冇事来学系--Vue2.0 组件开发详讲(下)

222 阅读2分钟

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」。

组件的自定义属性props

props节点是和data、methods等同级的节点,值是一个数组

<script>
  // 基本语法
	export default {
  	// 组件的自定义属性,允许自定义当前组件指定数据的初始值
    props: ['自定义的属性A','自定义的属性B','其他自定义的属性...'],
    
    
    // 组件的私有数据
    data(){
    	return{
      	// 数据
      }
    }
  }

</script>

使用方法:

  1. 在封装组件的时候上写一个props节点,并且设置一个自定义的属性

通过打印this会发现,this指向当前Vue组件的实例,init是对象里面的一个属性,因此可以通过this.init访问

  1. 使用上面的组件的时候,在标签内为上面自定义的属性设置属性值,即是为这个组件指定了一个初始值(注意:指定的这个值是字符串

只需要在设置自定义属性的时候,使用v-bind绑定属性,这样赋值的就是数字型(因为使用v-bind绑定属性时,写的是js代码,js代码中的字符串要加引号,即" '9' ")

  1. 在封装的组件上将要使用的初始值渲染到指定的位置

props中的数据,可以直接在模板结构中被使用


注意!props节点设置的数据是"只读"的!(可以修改成功,但是会报错)。若想修改props节点里面数据的值,可以将props里面的数据转存到data节点里面,因为data节点里面的数据都是可读可写的(props节点只负责设置初始值,改写的数据是data里面的数据)


props的default默认值

在声明自定义属性时,可以通过default来定义属性的默认值

<script>
	export default {
  	props: {			// 注意这里的props节点里面指向的是 对象 而不是数组
    	init: {			// 自定义属性init,指向一个配置对象
      	// 用default属性定义 自定义属性的默认值
        default: 0
        // 若外界使用该组件的时候没有传入init属性的值,则默认值生效,为0
      }
    }
  }
</script>

props的type值类型

在声明自定义属性时,可以通过type来定义属性的值类型

<script>
	export default {
  	props: {
      init{
    		// default属性 定义自定义属性的默认值
      	default: 0,
      	// 用type属性 定义自定义属性的值类型
      	// 如果传递过来的值不符合此类型,则会在终端报错
         
      	type: Number		// init的值类型必须是Number数字型
    	}
    	
    }
  }
</script>

props的required必填项

必填项校验required设置为true,则在使用组件的时候自定义属性必须传值,否则就报错 (即使有默认值也会报错)

非单文件组件和单文件组件

非单文件组件:一个文件中包含n个组件 ---> a.html

单文件组件:一个文件中只包含一个组件 ---> a.vue

<!-- 准备一个容器 -->
<div id="#root">
  <student></student>
</div>
<script>
	// 1、创建student组件 Vue的extend方法

	const student = Vue.extend({
    name: 'student',				// 创建组件时的name属性指定组件在 开发者工具 中呈现的名字
		template: `
			<div></div>
		`,			// template节点,配置组件的HTML结构,必须要有div容器(用模板字符串写比较方便)
		data(){						// 数据必须使用函数写法
			return {}				// return返回一个数据对象
		},
    methods: {}
	})
	
  // 简写方法 省略了Vue的extend方法
  const student = {}
  
	// 2、注册组件,在vm实例中(局部组件)
	
	const vm = new Vue({
		el: '#root'
		components: {				// 注册组件,components节点
			student	// studnet: student简写		注册的时候写的什么名字,使用的时候就要写什么名字
		}
	})

  // 3、使用组件则直接写组件标签<student></student>
  
  
  // 注册全局组件  在vm实例外
  // Vue.component('组件名称', 组件)   
  Vue.component('std', student)
</script>

组件的嵌套

在一个组件中注册和使用另一个组件,这就有了父子关系

<body>
  <div id="root">
  	<!-- 使用组件 -->
  </div>
  
  <script>
    // 定义student组件		子组件必须定义在父组件之前,不然报错
    const student = new Vue.extend({
    name: 'student',				// 创建组件时的name属性指定组件在开发者工具中呈现的名字
		template: `
			<div>
				<h2>学生名称:{{name}}</h2>
				<h2>学生年龄:{{age}}</h2>
    	</div>
		`,			// template节点,配置组件的HTML结构,必须有div容器(用模板字符串写比较方便)
		data(){						// 数据必须使用函数写法
			return {
      	name: '张三',
        age: 18
      }				// return返回一个数据对象
		}
	})
  	// 定义school组件
    const school = new Vue.extend({
		template: `
			<div>
				<h2>学校名称:{{name}}</h2>
				<h2>学校地址:{{address}}</h2>
				<student></student>			<!-- 子组件的使用也要在父组件中 -->
    	</div>
		`,			// template节点,配置组件的HTML结构,必须有div容器(用模板字符串写比较方便)
		data(){						// 数据必须使用函数写法
			return {
      	name: '叶集大学',
        address: '赛博坦'
      }				// return返回一个数据对象
		},
    components: {			// 子组件要注册在父组件里面
    	student
    }
	})
    
    const vm = new Vue({
			el: '#root'
			components: {				// 注册组件,components节点
				school
			}
		})
  </script>
</body>

跋尾

本篇内容就到这里了~ 我是Zeus👩🏻‍🚀来自一个互联网底层组装员,下一篇再见! 📖