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 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
用JavaScript 处理 URL 的两个函数代码
Aug 13 Javascript
初识javascript 文档碎片
Jul 13 Javascript
JS获取当前网址、主机地址项目根路径
Nov 19 Javascript
判断某个字符在一个字符串中是否存在的js代码
Feb 28 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
Aug 27 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
JS中setTimeout的巧妙用法前端函数节流
Mar 24 Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 Javascript
JS实现HTML页面中动态显示当前时间完整示例
Jul 30 Javascript
浅析vue-router实现原理及两种模式
Feb 11 Javascript
JS实现鼠标按下拖拽效果
Jul 23 Javascript
使用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
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
php中使用url传递数组的方法
2015/02/11 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
Python字符遍历的艺术
2008/09/06 Python
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
学习委员自我鉴定
2014/01/13 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python