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 相关文章推荐
可以支持多中格式的JS键盘
May 02 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
May 07 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 Javascript
js实现在同一窗口浏览图片
Sep 17 Javascript
JavaScript面向对象之私有静态变量实例分析
Jan 14 Javascript
javascript运算符——逻辑运算符全面解析
Jun 27 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
jquery replace方法去空格
May 08 jQuery
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
python机器学习库xgboost的使用
2020/01/20 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
优秀教师工作感言
2014/02/16 职场文书
应聘护士求职信
2014/07/21 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书