• vue-cli中的index.html ,main.js , App.vue的关系



    ###发现不少小伙伴才刚开始接触到这个结构都被绕的迷糊,而发现很多人说的也不是那么准确,那么下面我来说一下是怎么回事###

    1.首先我们来看看原生Vue中组件的写法, 我们按照vue-cli的结构按照原生的写法去写一下

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    	<script src="https://cdn.jsdelivr.net/npm/vue@2.6.6/dist/vue.js"></script>
    </head>
    <body>
    
    	 <!-- index.html -->
    	 <div id="app"></div>
    	
    	<script type="text/javascript">
    
    		//App.vue
    		var 这是一个子组件 = {
    					template:`<div id="aaa" @click="handclick()">哈哈哈哈哈</div>`,
    					methods:{
    						handclick:function(){
    							alert("1111");
    						}
    					},
    					data:function(){
    						return {}
    					}
    				}
    
    
    		//main.js (官方API说了:如果有Vue根实例里有template这个属性 会将el挂载的元素替换)
    		new Vue({
    			el:"#app",
    			components:{"child":这是一个子组件},
    			template:"<child></child>",
    		})
    
    	</script>
    </body>
    </html>
    

    2.我们打开vue-cli里面的main.js,这个文件被称为入口文件,这个里面有一个vue的实例,el:"#app",这个挂载的元素实际上是我们的index.html的 <div id="app"></div>,看下面的图,这实际是ES6的写法

    import Vue from 'vue'
    import App from './App'
    import router from './router'
    
    Vue.config.productionTip = false
    
    new Vue({
      el: '#app',
      router,
      components: { App },
      template: '<App/>'
    })
    
    

    3.我们在转成ES5的写法,import(导入)这是一个子组件 就是 App.vue

    import Vue from 'vue'
    import 这是一个子组件 from './App'
    import router from './router'
    
    Vue.config.productionTip = false
    
    new Vue({
      el: '#app',
      router:router,
      components: {	"child":这是一个子组件 },
      template: '<child></child>'
    })
    

    4.以上原生Vue 和 vue-cli的写法都是一样的,把子组件放到了根实例的template属性里面,实际上App.vue是根实例下的一个子组件,但是我们把这个子组件当作根组件来使用而已(说到底App.vue就是根实例下的一个子组件),那怎么来证明呢,我们来验证一下App.vue实际上是不是子组件,我们给根组件一个模板,并在里面在放App.vue这个子组件,并且往子组件传一个参数

    
    import Vue from 'vue'
    import 这是一个子组件 from './App'
    import router from './router'
    
    Vue.config.productionTip = false
    
    new Vue({
      el: '#app',
      router:router,
      components: { "child":这是一个子组件 },
      template: `<div @click="testClick()" style="background:pink;">
    
    				我是根组件
    
    				<child :message="sendData" style="background:orange;"></child>
      			 </div>`,
      data:{
      	text:"我是根组件",
      	sendData:"嘻嘻嘻嘻"
      },
      methods:{
      	testClick:function(){
      		alert("我是根组件")
      	}
      }
    })
    

    ```
    上面已经证明了,App.vue是根实例下的一个子组件。
    因为main.js是入口文件不适合写逻辑,所以下面分支出一个子组件(App.vue),我们使用的时候就把这个子组件(App.vue)当做我们的顶级组件!
    <br>
    <br>
    ![](https://img2018.cnblogs.com/blog/1603628/201903/1603628-20190323215857599-69630583.png)
    
    
    看上面这个vue-devTools,Root 是我们的根实例,他在main.js这个入口文件里面。
    Root >> App >> HelloWorld
  • 相关阅读:
    MATLAB简易验证码识别程序介绍
    [Java面试三]JavaWeb基础知识总结.
    [Java面试十二]数据库概念相关
    [Java面试十一]数据库总结.
    [Java面试十]浏览器跨域问题.
    [Java面试九]脚本语言知识总结.
    [Java面试八]Hibernate总结以及在面试中的一些问题.
    [Java面试七]Mybatis总结以及在面试中的一些问题.
    [Java面试六]SpringMVC总结以及在面试中的一些问题.
    [Java面试五]Spring总结以及在面试中的一些问题.
  • 原文地址:https://www.cnblogs.com/liu-di/p/10435858.html
Copyright © 2020-2023  润新知