当前位置: 首页 > news >正文

浅谈vue中index.html、main.js、App.vue、index.js之前的关系以及加载过程

项目运行

项目的运行入口index.html

为什么index.html是项目的入口以及为什么index.html加载后会继续加载main.js、App.vue、index.js,以及他们之间的关系是如何联系起来的呢,这块的配置文件位于build文件夹下,包括webpack.dev.conf.js等,感兴趣的可以了解下。通过项目的配置文件,可以加载运行我们的index.html文件以及自动关联vue相关的模块。

首先我们来看一下index.html中的内容

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>y</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

在body体中只有一个div标签,其id为app,这个id将会连接到src/main.js内容,接着我们看一下main.js中的主要的代码

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
 
Vue.config.productionTip = false
 
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

在main.js中,新建了一个vue实例,并使用el:#app链接到index.html中的app,并使用template引入组件和路由相关的内容(具体的涉及到vue的语法规则,如果不理解的先记下来吧,继续往后看,等了解vue的相关内容后,可能会更清晰)。也就是说通过main.js我们关联到App.vue组件,接着,我们继续看一下App.vue组件中的内容。

<template> 
  <div id="app">
    <img src="./assets/logo.png">
    <router-view/>
  </div>
</template>
 
<script>
export default {
  name: 'App'
}
</script>
 
<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

看一下App.vue中的内容,是一个标准的App.vue模板的形式,包含了、、三部分,从template标签中可以看到,使用img标签加载了vue的图像,也就是我们使用npm run dev运行vue项目后看到的图像,那么图像下面的内容是从哪里渲染出来的呢?

我们注意到,标签下,除了标签外,还有标签,标签将会把路由相关内容渲染在这个地方,接下来,我们看一下路由的内容有哪些,在哪里出现的。其实,这个文件位于src/router/index.js中,我们看一下index.js中的代码

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
 
Vue.use(Router)
 
export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})

在index.js的代码中,建立了路由相关的内容,也就会渲染到app.vue下面的中。在index.js中,将helloworld组件发布为路由,换句说,index.js在这里就是将helloword发布为路由,以在图片下面进行展示helloword内容,接下来我们再看看components/helloword中的内容是啥(由于里面的内容比较多,这里我们只截取了template中的内容)。

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
    <ul>
      <li>
        <a
          href="https://vuejs.org"
          target="_blank"
        >
          Core Docs
        </a>
      </li>
      <li>
        <a
          href="https://forum.vuejs.org"
          target="_blank"
        >
          Forum
        </a>
      </li>
      <li>
        <a
          href="https://chat.vuejs.org"
          target="_blank"
        >
          Community Chat
        </a>
      </li>
      <li>
        <a
          href="https://twitter.com/vuejs"
          target="_blank"
        >
          Twitter
        </a>
      </li>
      <br>
      <li>
        <a
          href="http://vuejs-templates.github.io/webpack/"
          target="_blank"
        >
          Docs for This Template
        </a>
      </li>
    </ul>
    <h2>Ecosystem</h2>
    <ul>
      <li>
        <a
          href="http://router.vuejs.org/"
          target="_blank"
        >
          vue-router
        </a>
      </li>
      <li>
        <a
          href="http://vuex.vuejs.org/"
          target="_blank"
        >
          vuex
        </a>
      </li>
      <li>
        <a
          href="http://vue-loader.vuejs.org/"
          target="_blank"
        >
          vue-loader
        </a>
      </li>
      <li>
        <a
          href="https://github.com/vuejs/awesome-vue"
          target="_blank"
        >
          awesome-vue
        </a>
      </li>
    </ul>
  </div>
</template>

在helloworld.vue的template中,我们可以看到界面上渲染的一些连接等内容。到此,这个页面的加载渲染过程结束了。

总结

通过上述过程,我们可以看到项目加载的过程是index.tml->main.js->app.vue->index.js->helloworld.vue。这里只是对我们运行项目后,如何出现首页面做了简单的解释,对具体的实现没有进行分析。

相关文章:

  • 忠厚开发者与“厚道”甲方II(超级Demo)——CSDN外包实践(38)
  • eladmin前端 学习笔记
  • 外包频道服务能力共建,项目顾问CRM管理——CSDN外包实践(39)
  • js中map与foreach的区别
  • em与rem的区别与使用
  • AI编辑器设想
  • export default 与 export 区别
  • 启动用户实例的进程时出错(Sql Server Exoress)
  • java setter 的链式调用
  • [需求]需求分析能力之二:引入领域模型
  • uniapp如何动态绑定事件
  • 北京.NET俱乐部第十次活动-“使用VSTS优化软件开发生命周期”
  • VScode+ESlint 自动格式化代码(2021)
  • 项目代理工作手册II(工作流程+收益分析)——CSDN外包实践(40)
  • eslint关闭 nodef 校验
  • 【个人向】《HTTP图解》阅后小结
  • Android单元测试 - 几个重要问题
  • bootstrap创建登录注册页面
  • canvas 五子棋游戏
  • ES6--对象的扩展
  • Fastjson的基本使用方法大全
  • HTML中设置input等文本框为不可操作
  • JavaScript设计模式与开发实践系列之策略模式
  • linux安装openssl、swoole等扩展的具体步骤
  • Lucene解析 - 基本概念
  • SwizzleMethod 黑魔法
  • vue2.0项目引入element-ui
  • vue总结
  • 从0实现一个tiny react(三)生命周期
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 马上搞懂 GeoJSON
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 我是如何设计 Upload 上传组件的
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​TypeScript都不会用,也敢说会前端?
  • #ifdef 的技巧用法
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (11)MATLAB PCA+SVM 人脸识别
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (九十四)函数和二维数组
  • (一)u-boot-nand.bin的下载
  • (转)ORM
  • (转)shell调试方法
  • (转载)虚函数剖析
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .bashrc在哪里,alias妙用
  • .gitignore文件设置了忽略但不生效
  • .net 8 发布了,试下微软最近强推的MAUI