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 import css实例代码
Jul 18 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
Dec 19 Javascript
Visual Studio中的jQuery智能提示设置方法
Mar 27 Javascript
js/jquery去掉空格,回车,换行示例代码
Nov 05 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
Jan 07 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
Feb 07 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
jQuery实现点击行选中或取消CheckBox的方法
Aug 01 Javascript
node.js版本管理工具n无效的原理和解决方法
Nov 24 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
May 07 Javascript
Vuex,iView UI面包屑导航使用扩展详解
Nov 04 Javascript
小程序实现录音上传功能
Nov 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
jQuery链使用指南
2015/01/20 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python对html代码进行escape编码的方法
2015/05/04 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
Python matplotlib可视化实例解析
2020/06/01 Python
Python创建临时文件和文件夹
2020/08/05 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
大四自我鉴定范文
2013/10/06 职场文书
幼师自荐信
2013/10/26 职场文书
集团公司人力资源部岗位职责
2014/01/03 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
2015年维修工作总结
2015/04/25 职场文书
离职信范文
2015/06/23 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js