Vue2几种常见开局方式详解


Posted in Javascript onSeptember 09, 2017

在SF问题中看到了一个关于vue-cli中的template问题,问题是这样的:

用vue-cli工具生成的main.js中:

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,
 template: '<App/>',
 components: { App }
})

然后问友的问题是:

【template: '<App/>'】这句是什么意思?
是指使用app.vue模板吗?但在vue没有看到这样的用法哦!

里面只有:

1 template:'#xxx' 根据id获取
2 template:'<xx>.....<xx>' 直接使用

请问有没有相关的文档解释呢?

看到这个问题,其实就是vue的开局方式写法总结。

Vue2 加了reader选项后, 再加上几种构建方式, 开局方式真是各种五花八门, 这里列几种常见的, 说说注意点

我们先建立一个 app.vue 来当入口组件, 即所有页面都会以这个组件为模板 (下面代码中无特别说明, App 即指下面这个组件)

<template>
 <div id="app">
  <img src="./assets/logo.png">
  <hello></hello>
  <!-- 这里还可以写点其他组件, 或者路由也可以 <router-view></router-view> -->
 </div>
</template>
<script>
import Hello from './components/Hello'
export default {
 name: 'app',
 components: {
  Hello
 }
}
</script>
<style>
</style>

方式 1

模板文件:

<div id="app"></div>

注意: vue2 已经不支持直接绑定在 body 和 html 元素上, 所以我们需要在 body 里写个挂载元素

main.js 入口文件:

import App from './app.vue'
new Vue({
 el: '#app',
 render: creatElment => creatElment(App)
})

这里的采用 es6 的写法, 转出 es5 就是

render: funciton(creatElment) {
  return creatElment(App)
}

creatElment 的第一个参数可以是String(HTML 标签名称) | Object(组件对象) | Function(函数), 这里传的就是个组件对象

注意: 这种情况下, App 组件并不是根组件

方式 2

模板文件:

<div id="app"></div>

main.js 入口文件:

import App from './app.vue'
new Vue({
 el: '#app',
 render: creatElment => creatElment('App'),
 components: {
  App
 }
})

这个写法是不是和第一种很像? 只不过这里传的就是个App标签, 通过render渲染一个<App></App>元素, 然后把 App 当组件来用
注意: 这种情况下, App 组件并不是根组件

方式 3

模板文件:

<div id="app"></div>

main.js 入口文件:

import App from './app.vue'
new Vue({
 el: '#app',
 ...App
})

这种方法和方式1 基本一样, 区别就在于render: creatElment => creatElment(App)和...App
render: creatElment => creatElment(App)是把 App 当成一个组件对象, 给render解析, 而...App是将 App 这个组件对象和{el: '#app'}这个对象直接合并, 变成Vue的参数
注意: 这种情况下, this.$root 是 App 组件

注意: 这种写法, 需要在.babelrc里添加stage-3以上的presets, 如:

{
  "presets": ["es2015", "stage-2"]
}

方式 4

模板文件:

<div id="app">
  <App></App>
</div>

main.js 入口文件:

import App from './app.vue'
new Vue({
 el: '#app',
 components: {
   App
 }
})

这种写法就是完全把 App 当成一个组件使用, 所以我们需要在模板里添加<App></App>
注意: 上面这种写法需要在 webpack 配置别名, 这种情况下, App 组件并不是根组件

module.exports = {
 resolve: {
  alias: {
   'vue$': 'vue/dist/vue.common.js'
  }
 }
}

方式 5

模板文件:

<div id="app"></div>

main.js 入口文件:

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

这种写法就也是完全把 App 当成一个组件使用, 不过模板直接写在了template选项里
注意: 上面这种写法需要在 webpack 配置别名, 这种情况下, App 组件并不是根组件

module.exports = {
 resolve: {
  alias: {
   'vue$': 'vue/dist/vue.common.js'
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
如何做到打开一个页面,过几分钟自动转到另一页面
Apr 20 Javascript
地址栏上的一段语句,改变页面的风格。(教程)
Apr 02 Javascript
IE浏览器兼容Firefox的JS脚本的代码
Oct 23 Javascript
浅析vue数据绑定
Jan 17 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
重新理解JavaScript的六种继承方式
Mar 24 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
Nov 09 jQuery
MUI 实现侧滑菜单及其主体部分上下滑动的方法
Jan 25 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
Dec 13 Javascript
Vue 的 v-model用法实例
Nov 23 Vue.js
使用JS动态显示文本
Sep 09 #Javascript
深入理解ES7的async/await的用法
Sep 09 #Javascript
jQuery事件对象的属性和方法详解
Sep 09 #jQuery
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 #Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 #Javascript
js实现音乐播放控制条
Sep 09 #Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 #Javascript
You might like
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
php中yii框架实例用法
2020/12/22 PHP
arguments对象
2006/11/20 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
线程同步的方法
2016/11/23 面试题
物流专业毕业生推荐信范文
2013/11/18 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
安全资金保障制度
2014/01/23 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android