Vue2 几种常见开局方式

在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‘
    }
  }
} 
时间: 2024-12-28 01:53:39

Vue2 几种常见开局方式的相关文章

Redis 的几种常见使用方式

常见使用方式 Redis 的几种常见使用方式包括: Redis 单副本 Redis 多副本(主从) Redis Sentinel(哨兵) Redis Cluster Redis 自研 各种使用方式的优缺点 Redis 单副本 Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景. 优点: 架构简单,部署方便. 高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 cront

linux下几种常见安装方式

linux下几种常见的安装方式:1:rpm包安装(二进制安装)    安装---   rpm -ivh +安装包包名 2:tar包安装(源码安装)    安装---   tar zxvf(解压)---./configure(配置,编译前准备)---make(编译)---make install(安装)此过程中./configure后可以指定安装路径,也可不指定,不指定的话就类似于windows下的默认安装 3:yum安装(自动解决依赖关系)    安装---   yum install

Fibonacci series(斐波纳契数列)的几种常见实现方式

费波那契数列的定义: 费波那契数列(意大利语:Successione di Fibonacci),又译费波拿契数.斐波那契数列.斐波那契数列.黄金分割数列. 在数学上,费波那契数列是以递归的方法来定义: (n≧2) 用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就由之前的两数相加. 首几个费波那契系数是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233-- 特别指出:0不是第一项,而是第零项. 下面是费波那契数列的几种常见编程实现:

XML--Java中的四种常见解析方式--dom

Java中常用的解析方式主要有四种: Java 自带:Dom.Sax. 外加包:Jdom.Dom4j. 1.Dom 主要的构建方式 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder(); Document dm=db.parse("rec\\books.xml"); 其中节点类为Node  节点集合类为NodeList at

几种常见编码方式

在学习Python过程中接触到字符串类型str和bytes在bytes类型.计算机所有程序的计算都是用的str类型而在存储磁盘和网络传输中用的是bytes类型. >>> s=s.encode("gbk") >>> type(s) <class 'bytes'> 电脑音痴的我百度了一下. encode 用于编码,decode 用于解码. 原来"gbk"是一种编码形式.好吧.继续百度.有了初步的认识. ASCII码:用来表

XML--Java中的四种常见解析方式--jdom与dom4j

jdom与dom4j作为特地为java的实现,比较灵活适合熟悉Java的人 jdom主要构建方法 SAXBuilder sax=new SAXBuilder(); 方法一:  InputStream in=new FileInputStream("rec\\books.xml");             Document document=sax.build(in);方法二:  Document document=sax.build("rec\\books.xml"

(nginx|apache)+tomcat 几种常见的代理实现方式或连接类型(connector type)

简单描述一下nginx两块网卡,eth1外网,eth0内网与tomcat eth0通信,用户请求静态内容由nginx直接响应,动态内容则nginx转发至后端tomcat响应 安装nginx,tomcat不再描述. nginx的配置文件如下:/etc/nginx/nginx.conf [[email protected] ~]# pnginx worker_processes 1; events { worker_connections 1024; } http { include mime.ty

C# 实现AOP 的几种常见方式

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获.性能监控等 AOP的本质是通过代理对象来间接执行真实对象,在代理类中往往会添加装饰一些额外的业务代码,比如如下代码: class RealA { public virtual string Pro { get; set; } public virtual void ShowHello(string

几种常见SQL分页方式效率比较-转

原文地址:几种常见SQL分页方式效率比较 分页很重要,面试会遇到.不妨再回顾总结一下. 1.创建测试环境,(插入100万条数据大概耗时5分钟). create database DBTestuse DBTest --创建测试表create table pagetest(id int identity(1,1) not null,col01 int null,col02 nvarchar(50) null,col03 datetime null) --1万记录集declare @i intset