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 DOM 操作实现代码
Aug 01 Javascript
javascript 闭包
Sep 15 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
Jan 16 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
AngularJS Controller作用域
Jan 09 Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
JS实现电脑虚拟键盘打字测试
Jun 24 Javascript
解决await在forEach中不起作用的问题
Feb 25 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php中计算时间差的几种方法
2009/12/31 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
如何在python中写hive脚本
2019/11/08 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
绩效工资实施方案
2014/03/15 职场文书
选秀节目策划方案
2014/06/06 职场文书
就业协议书
2014/09/12 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python
python 学习GCN图卷积神经网络
2022/05/11 Python