VUE学习(十一)、组件——非单文件组件、单文件组件

VUE学习(十一)、组件——非单文件组件、单文件组件

一、非单文件组件

一个文件包含有n个组件

1、基本使用

<body>
	
	
	<div id="root">
		<hello>hello>
		<hr />
		<h1>{{msg}}h1>
		<hr />
		
		<school>school>
		<hr />
		
		<student>student>
	div>

	<div id="root2">
		<hello>hello>
	div>
body>

<script type="text/javascript">
	Vue.config.productionTip = false;

	//第一步:创建school组件
	const school = Vue.extend({
		template: `
			

学校名称:{{schoolName}}

学校地址:{{address}}

`
, // el:'#root', //组件定义时,一定不要写el配置项,因为最终所有的组件都要被一个vm管理,由vm决定服务于哪个容器。 data() { return { schoolName: "xxx大学", address: "山东" }; }, methods: { showName() { alert(this.schoolName); } } }); //第一步:创建student组件 const student = Vue.extend({ template: `

学生姓名:{{studentName}}

学生年龄:{{age}}

`
, data() { return { studentName: "张三", age: 18 }; } }); //第一步:创建hello组件 const hello = Vue.extend({ template: `

你好啊!{{name}}

`
, data() { return { name: "Tom" }; } }); //第二步:全局注册组件 Vue.component("hello", hello); //创建vm new Vue({ el: "#root", data: { msg: "你好啊!" }, //第二步:注册组件(局部注册) components: { 'school': school, student //简写 } }); new Vue({ el: "#root2" });
script>

2、注意点

<body>
	
	
	<div id="root">
		<h1>{{msg}}h1>
		<school>school>
	div>
body>

<script type="text/javascript">
	Vue.config.productionTip = false;

	//定义组件
	const s = Vue.extend({
		name: "myname", //使用name配置项指定组件在开发者工具中呈现的名字
		template: `
			

学校名称:{{name}}

学校地址:{{address}}

`
, data() { return { name: "xx大学", address: "云南" }; } }); new Vue({ el: "#root", data: { msg: "欢迎学习Vue!" }, components: { school: s } });
script>

3、组件的嵌套

<body>
	
	<div id="root">
		
	div>
body>

<script type="text/javascript">
	Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

	//定义student组件
	const student = Vue.extend({
		name:'student',
		template:`
			

学生姓名:{{name}}

学生年龄:{{age}}

`
, data(){ return { name:'xxx大学', age:18 } } }) //定义school组件 const school = Vue.extend({ name:'school', template:`

学校名称:{{name}}

学校地址:{{address}}

`
, data(){ return { name:'xxx大学', address:'北京' } }, //注册组件(局部) components:{ student } }) //定义hello组件 const hello = Vue.extend({ template:`

{{msg}}

`
, data(){ return { msg:'欢迎来到xxx大学学习!' } } }) //定义app组件 const app = Vue.extend({ template:`
`
, components:{ school, hello } }) //创建vm new Vue({ template:'', el:'#root', //注册组件(局部) components:{app} })
script>

4、VueComponent

<body>
	
	
	<div id="root">
		<school>school>
		<hello>hello>
	div>
body>

<script type="text/javascript">
	Vue.config.productionTip = false
	
	//定义school组件
	const school = Vue.extend({
		name:'school',
		template:`
			

学校名称:{{name}}

学校地址:{{address}}

`
, data(){ return { name:'xxx大学', address:'北京' } }, methods: { showName(){ console.log('showName',this) } }, }) const test = Vue.extend({ template:`atguigu` }) //定义hello组件 const hello = Vue.extend({ template:`

{{msg}}

`
, data(){ return { msg:'你好啊!' } }, components:{test} }) // console.log('@',school) // console.log('#',hello) //创建vm const vm = new Vue({ el:'#root', components:{school,hello} })
script>

5、 一个重要的内置关系

<body>
	
	
	<div id="root">
		<school>school>
	div>
body>

<script type="text/javascript">
	Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
	Vue.prototype.x = 99

	//定义school组件
	const school = Vue.extend({
		name:'school',
		template:`
			

学校名称:{{name}}

学校地址:{{address}}

`
, data(){ return { name:'xxx大学', address:'北京' } }, methods: { showX(){ console.log(this.x) } }, }) //创建一个vm const vm = new Vue({ el:'#root', data:{ msg:'你好' }, components:{school} }) //定义一个构造函数 /* function Demo(){ this.a = 1 this.b = 2 } //创建一个Demo的实例对象 const d = new Demo() console.log(Demo.prototype) //显示原型属性 console.log(d.__proto__) //隐式原型属性 console.log(Demo.prototype === d.__proto__) //程序员通过显示原型属性操作原型对象,追加一个x属性,值为99 Demo.prototype.x = 99 console.log('@',d) */
script>

二、单文件组件

一个文件中只包含1个组件

1、School.vue







2、Student.vue





3、main.js

// 浏览器不支持模块化语法,需要脚手架才能运行
import App from "./App.vue";

new Vue({
    el: "#root",
    template: ``,
    components: { App }
});

4、index.html

DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>练习一下单文件组件的语法title>
    head>
    <body>
        
        <div id="root">

		div>
        
        
    body>
	<script src="../js/vue.js">script>
	<script src="./main.js">script>
html>

推荐阅读

VUE笔记文章列表

1、VUE学习(一)、基于简单js引入的Vue快速入门——简单实例使用_醉瑾_的博客-CSDN博客

2、VUE学习(二)、计算属性vs侦听属性——基于案例的对比_醉瑾_的博客-CSDN博客

3、VUE学习(三)、绑定样式——class和style_醉瑾_的博客-CSDN博客

4、VUE学习(四)、条件渲染——v-if与v-show_醉瑾_的博客-CSDN博客

5、VUE学习(五)、列表渲染之:key原理、列表过滤、列表排序_醉瑾_的博客-CSDN博客

6、VUE学习(六)、vue 监测数据改变原理_醉瑾_的博客-CSDN博客

7、VUE学习(七)、收集表单数据_醉瑾_的博客-CSDN博客

8、VUE学习(八)、过滤器_醉瑾_的博客-CSDN博客

9、VUE学习(九)、内置指令、自定义指令_醉瑾_的博客-CSDN博客

10、VUE学习(十)、生命周期_醉瑾_的博客-CSDN博客

11、VUE学习(十一)、组件——非单文件组件、单文件组件_醉瑾_的博客-CSDN博客

12、VUE学习(十二)、vue脚手架的使用_醉瑾_的博客-CSDN博客

13、VUE学习(十三)、ref属性、props配置项、minix混入、自定义插件、scoped样式_醉瑾_的博客-CSDN博客

14、VUE学习(十四)、TodoList案例(基于props实现组件间通信通)_醉瑾_的博客-CSDN博客

15、VUE学习(十五)、组件自定义事件及todoList案例自定义事件完成_醉瑾_的博客-CSDN博客

16、VUE学习(十六)、全局事件总线及TodoList案例事件总线实现_醉瑾_的博客-CSDN博客

17、VUE学习(十七)、Vue封装的过度与动画_醉瑾_的博客-CSDN博客

18、VUE学习(十八)、VUE脚手架配置代理_醉瑾_的博客-CSDN博客

19、VUE学习(十九)、Github用户搜索案例_醉瑾_的博客-CSDN博客

20、VUE学习(二十)、插槽_醉瑾_的博客-CSDN博客

你可能感兴趣的:(VUE,vue.js,前端,javascript)