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 Perfection kill 测试及答案
Mar 23 Javascript
微信小程序 navigation API实例详解
Oct 02 Javascript
JavaScript中boolean类型之三种情景实例代码
Nov 21 Javascript
JS实现浏览器打印、打印预览示例
Feb 28 Javascript
彻底学会Angular.js中的transclusion
Mar 12 Javascript
详谈jQuery.load()和Jsp的include的区别
Apr 12 jQuery
详解Node.js项目APM监控之New Relic
May 12 Javascript
JavaScript实现无刷新上传预览图片功能
Aug 02 Javascript
js使用formData实现批量上传
Mar 27 Javascript
antd Upload 文件上传的示例代码
Dec 14 Javascript
webpack 如何解析代码模块路径的实现
Sep 04 Javascript
Element Carousel 走马灯的具体实现
Jul 26 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中定义网站根目录的常用方法
2010/08/08 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
使用js 设置url参数
2013/07/08 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
python利用faker库批量生成测试数据
2020/10/15 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
C语言50道问题
2014/10/23 面试题
瀑布模型都有哪些优缺点
2014/06/23 面试题
《春晓》教学反思
2014/04/20 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
离职报告范文
2014/11/04 职场文书