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 相关文章推荐
jQuery 数据缓存data(name, value)详解及实现
Jan 04 Javascript
理清apply(),call()的区别和关系
Aug 14 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
innerHTML在IE中报错解决方案
Dec 15 Javascript
js函数内变量的作用域分析
Jan 12 Javascript
JavaScript字符串常用类使用方法汇总
Apr 14 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
js检查是否关闭浏览器的方法
Aug 02 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
微信小程序常用赋值方法小结
Apr 30 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现给数组按片赋值的方法
2015/07/28 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
Python for循环及基础用法详解
2019/11/08 Python
django框架ModelForm组件用法详解
2019/12/11 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
幼儿园义卖活动方案
2014/01/17 职场文书
春季防火方案
2014/05/10 职场文书
迎国庆演讲稿
2014/09/15 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
寒假致家长的一封信
2015/10/10 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL