Vue.js的各种入口点令人困惑

时间:2019-02-01 21:18:54

标签: vue.js

我创建了两个Vuejs项目。 第一个main.js如下所示:

import Vue from 'vue'
import App from './App.vue'

import BootstrapVue from "bootstrap-vue";
import "bootstrap/dist/css/bootstrap.css";
import "bootstrap-vue/dist/bootstrap-vue.css";



Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

第二个看起来像这样:

import Vue from "vue";
import App from "./App";
import router from "./router";

import BootstrapVue from "bootstrap-vue";
import "bootstrap/dist/css/bootstrap.css";
import "bootstrap-vue/dist/bootstrap-vue.css";


Vue.use(BootstrapVue);

Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue({
  el: "#app",
  router,
  components: { App },
  template: "<App/>"
});

请有人向我解释这两个代码之间的区别,特别是通过两种不同的方式来创建新vue实例吗?

1 个答案:

答案 0 :(得分:3)

对于第一个main.js:

首先,您必须了解所有渲染:

渲染器:h => h(App)的简称:

render: function (createElement) {
    return createElement(App);
}

可以缩写为:

render: (createElement) => {
    return createElement(App);
}

可以再次缩短为(如上所述,h是createElement的别名)

render: (h) => {
    return h(App);
}

然后将其进一步缩短为(使用ES6“胖箭头”语法):

render: h => h(App);

H,它来自术语“ hyperscript”,在许多虚拟域实现中通常使用。 “ Hyperscript”本身代表“生成HTML结构的脚本”,因为HTML是“超文本标记语言”的首字母缩写。

$ mount允许您在需要时显式安装Vue实例。这意味着您可以延迟vue实例的安装,直到页面中存在特定元素或某些异步过程完成为止,这在将vue添加到将元素注入DOM的旧版应用程序中时特别有用。当我想在多个测试中使用相同的vue实例时,这经常在测试中出现:

// Create the vue instance but don't mount it
const vm = new Vue({
  template: '<div>I\'m mounted</div>',
  created(){
    console.log('Created');
  },
  mounted(){
    console.log('Mounted');
  }
});

// Some async task that creates a new element on the page which we can mount our instance to.
setTimeout(() => {
   // Inject Div into DOM
   var div = document.createElement('div');
   div.id = 'async-div';
   document.body.appendChild(div);

  vm.$mount('#async-div');
},1000)

对于第二个,我强烈建议您查看当前的Vue文档:

https://vuejs.org/v2/guide/instance.html

在App.vue中拥有所有模板代码(而在index.html的#app div中没有​​),我们可以使用仅运行时的Vue版本,该版本小于完整版本。

但让我们分手吧:

  1. el: '#app',将在您的index.html文件中查找div <div id="app"></div>;

  2. 路由器,将允许您在全局范围内使用路由器;

  3. 组件:{App},导入App.vue,以及所有已导入到其中的组件,通常将人们经常放在此文件中:侧栏组件,标题组件,可导航的内容;

4。template: "<App/>",只有在导入其中导入的App.vue组件或在此文件中创建的HTML后,才会使用id =“ app”在HTML中创建div。被这个div包裹。人们经常使用<router-view>来加载路由器页面组件。

第二个实例的目的是拥有更整洁的index.html并将所有内容包含在App.vue中

相关问题