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 相关文章推荐
javascript 闭包
Sep 15 Javascript
js切换div css注意的细节
Dec 10 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
Dec 08 Javascript
node.js实现端口转发
Apr 14 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
Aug 05 Javascript
AngularJS Phonecat实例讲解
Nov 21 Javascript
JavaScript利用Date实现简单的倒计时实例
Jan 12 Javascript
详谈构造函数加括号与不加括号的区别
Oct 26 Javascript
Vue写一个简单的倒计时按钮功能
Apr 20 Javascript
jquery.pager.js分页实现详解
Jul 29 jQuery
layui 表格操作列按钮动态显示的实现方法
Sep 06 Javascript
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
使用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 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
python静态方法实例
2015/01/14 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
大码女装:Ulla Popken
2019/08/06 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
网络管理员岗位职责
2014/03/17 职场文书
金融专业求职信
2014/08/05 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
教师个人发展总结
2015/02/11 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS