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 相关文章推荐
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
Sep 13 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
JS不间断向上滚动效果代码
Dec 25 Javascript
JavaScript中发布/订阅模式的简单实例
Nov 05 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
详解自动生成博客目录案例
Dec 09 Javascript
基于AngularJS的简单使用详解
Sep 10 Javascript
vue 过滤器filter实例详解
Mar 14 Javascript
jQuery实现ajax回调函数带入参数的方法示例
Jun 26 jQuery
浅谈Angular6的服务和依赖注入
Jun 27 Javascript
JS实现秒杀倒计时特效
Jan 02 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
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
jquery中radio checked问题
2015/03/16 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
python获取地震信息 微信实时推送
2019/06/18 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
护士个人简历自荐信
2013/10/18 职场文书
就业协议书范本
2014/04/11 职场文书
材料化学专业求职信
2014/07/15 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
主持人开场白台词
2015/05/29 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
MySQL创建定时任务
2022/01/22 MySQL
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis