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动态加载实现方法一
Aug 22 Javascript
JS的replace方法详细介绍
Nov 09 Javascript
一个JavaScript获取元素当前高度的实例
Oct 29 Javascript
Node.js实现批量去除BOM文件头
Dec 20 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
EasyUI加载完Html内容样式渲染完成后显示
Jul 25 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
快速了解vue-cli 3.0 新特性
Feb 28 Javascript
从0到1构建vueSSR项目之路由的构建
Mar 07 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
用php解析html的实现代码
2011/08/08 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
python 日志增量抓取实现方法
2018/04/28 Python
python使用turtle库绘制时钟
2020/03/25 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
五种Python转义表示法
2020/11/27 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
日语专业个人的求职信
2013/12/03 职场文书
中秋节超市促销方案
2014/01/30 职场文书
感恩之星事迹材料
2014/05/03 职场文书
任命书范本大全
2014/06/06 职场文书
Python的这些库,你知道多少?
2021/06/09 Python