使用vue-cli创建的vue项目,如何在这种项目中使用组建?

首先创建项目、启动项目

我们再来了解一下目录结构,src文件夹是写逻辑代码的地方,public是最终渲染到浏览器的地方。

在public下index.html中的id="app"和浏览器中的id="app"不是一样的,pulic下的index.html中的id="app"是指vue挂载的地方,浏览器中id="app"是会覆盖index.html节点中的id的东西。

入口文件是main.js(可配置),通过模块化的方式引入了vue(在node_modules下),也可以使用es6语法,并new了一个vue控制#app的html

// main.js初始文件import Vue from 'vue'

import App from './App.vue'

Vue.config.productionTip = false

new Vue({

render: h => h(App),

}).$mount('#app')

.$mount('#app')等价el: "#app"

这个时候我们可以写两个模板(已知)。

html模板: 可以写当前id="app"的这段div,可以在里面写{{}},v-on等vue语法

template模板: 可以在当前模板中写template字段来使用vue,并且template模板会覆盖html模板

但是这里写的是render函数。什么是render函数?

模板 -> 进行编译 -> 生成ast树 -> 数据绑定 -> 成render函数 -> 成虚拟dom -> 真实dom

如果直接使用render函数,就省略了模板的编译过程,vue运行的更快。

--------------岔开一下: render函数基础用法----------------------------

第一种用法:在render函数中会自动注入一个createElement参数

2. return createElement(这是一个函数)

3 .createElement第一参数是想渲染的dom元素,第二参数是对该dom节点的配置(如id,class等,可忽略,到第三参数),第三参数是一个数组

4. 第一参数为一个父元素(也会覆盖html模板),第三参数是一个数组,数组里的为子元素(实验中传文本节点)

5. 若还要创建元素,可以数组中继续写createElement函数,在里头再创建一个p标签

6. 总结: 感觉这样写繁琐,但是html模板和template模板最终都会渲染成render函数,所以还是render函数执行效率高

render函数

new Vue({

el: "#app",

render: function(createElement) {

return createElement('div', ['hello, world!', createElement('p', ['fanghuayong'])])

}

})

第二种用法:只传一个参数(是对象 组件的配置项)

回顾一下组件: 第一参数是名称,第二参数是配置项

// 第一参数组件名称// 第二参数组件配置项Vue.component("my-com", {

template: "

{{ name }}

",

data(){

return {

name: "fanghuayong"

}

}

})

把组件配置项赋值给一个变量,再传入createElement函数中

代码如下: 组件配置项也可以有两种写法

template模版:好写,但还是要编译

render函数:不好写,但是不需要编译,执行效率高

var app = {

// template: "

{{ name }}

", // 这种方法也是需要编译的 render: function(createElement) {

// 这种方式不需要编译了,但是写起来更麻烦 return createElement('div', ['fanghuayong1', '0000'])

},

data(){

return {

name: "fanghuayong"

}

}

}

new Vue({

el: "#app",

render: function(createElement) {

return createElement(app)

// 把组件配置项传入 }

})

---------------------回到单文件组件中------------------------

使用es5还原main.js中的render函数return出去默认传进来的h(自定义)函数(已知)

因为直传了一个参数,不可能是第一种用法,所有是第二种用法。

new Vue({

render: function(h) {

return h(App)

}

}).$mount('#app')

特殊的配置项: 这个App是vue组件的一个配置项

console.log(App)

确实是一个配置项,有beforeCreate、beforeDestroy等这些钩子函数,还有render函数

App.vue在编译成配置项的同时,Vue会把template内容编译成render函数(vue做的事情)

假设我们不想用render函数,使用template模版的话,

// main.js文件new Vue({

template: "

name

"

// render: function(h) { // return h(App) // }}).$mount('#app')

会报错: 你正在使用仅仅是运行时候的构架环境vue

如果我们想把template模板编译成ast渲染成render函数,它应该在vue的源码中编译这部分的逻辑操作,如果把这部分的逻辑删了,源码就会变得更小,整个项目就更小,然后App编译的过程就交给package.json中的依赖项"vue-template-compiler"来做(这是webpack做的事情),所有组件渲染出来以后都是render函数,没有template模板。vue页面渲染的更加快

vue源码中把编译的这部分去掉了,只是个运行的环境,少了vue源码,所有只写template模板就不好用了。(当前vue是去掉了编译部分的vue)

总结: 如何用.vue这个文件组件,就是把组件的配置项写成了一个文件的形式,template里写的就是component组件中的template字段,script中写其他的配置项

// App.vue文件

{{ name }}

import HelloWorld from './components/HelloWorld.vue'

export default {

name: 'app',

data() {

return {

name: "fanghuayong"

}

},

components: {

HelloWorld

}

}

#app1 {

font-family: 'Avenir', Helvetica, Arial, sans-serif;

-webkit-font-smoothing: antialiased;

-moz-osx-font-smoothing: grayscale;

text-align: center;

color: #2c3e50;

margin-top: 60px;

}

-------------写个小项目-----------------------------

提醒: template模版需要一个根节点

可以直接写在App.vue中,但是我们要进行组件化开发

注册全局组件在src下创建一个server.vue文件

server.vue的代码

// server.vue的代码

服务器的状态: {{ status }}


转换

export default {

data() {

return {

status: '运行中',

}

},

methods: {

changeStatus: function() {

this.status == '运行中' ? this.status = '结束' : this.status = '运行中'

}

}

}

2. 现在组件配置项写好了,开始在main.js中注册全局组件

main.js的代码

import Vue from 'vue'

import App from './App.vue'

import Server from './server.vue'

Vue.config.productionTip = false

// 注册全局组件Vue.component('app-server', Server)

new Vue({

render: function(h) {

return h(App)

}

}).$mount('#app')

3. 现在注册好组件了,我们去App.vue中使用组件

App.vue中的代码

// 直接使用标签就可以了

export default {

}

注册局部组件

在src下新建一个serverStatus.vue文件

serverStatus.vue代码

服务器的状态: {{ status }}


转换

export default {

data() {

return {

status: '运行中',

}

},

methods: {

changeStatus: function() {

this.status == '运行中' ? this.status = '结束' : this.status = '运行中'

}

}

}

server.vue代码

// 引入它的配置项

import ServerStatus from "./serverStatus.vue"

export default {

// 注册局部组件

components: {

"app-server-status" : ServerStatus

}

}

main.js代码

import Vue from 'vue'

import App from './App.vue'

import Server from './server.vue'

console.log(App)

Vue.config.productionTip = false

// 注册全局组件Vue.component('app-server', Server)

new Vue({

render: function(h) {

return h(App)

}

}).$mount('#app')

App.vue代码

export default {

}

小结: 入口文件main.js的配置项是App.vue,App.vue中有一个全局组件标签app-server,这个标签是server.vue中的,server.vue中又有局部组件serverStatus.vue

render注册一个链接组件_vue: 单文件组件 render函数相关推荐

  1. Vue 单文件组件||Vue 单文件组件的基本用法||webpack 中配置 vue 组件的加载器|| 在 webpack 项目中使用 vue

    Vue 单文件组件 传统组件的问题和解决方案 1. 问题 1. 全局定义的组件必须保证组件的名称不重复 2. 字符串模板缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \ 3. 不支持 CS ...

  2. 非单文件组件和单文件组件区别

    这里写自定义目录标题 非单文件组件和单文件组件区别 非单文件组件和单文件组件区别 在学vue组件时有这么两个概念:非单文件组件和单文件组件. 现在来总结一下这两种组件区别: 非单文件组件: 一个文件里 ...

  3. vue教程2 【Vue组件化编程】 组件的创建和使用 非单文件组件和单文件组件的区别

    组件 实现局部功能的代码和资源的集合 非单文件组件 1.定义组件(创建组件) 2.注册组件 3.使用组件(写组件标签) 定义 使用Vue.extend(options)创建,其中options和new ...

  4. Vue(组件化编程:非单文件组件、单文件组件)

    一.组件化编程 1. 对比传统编写与组件化编程(下面两个解释图对比可以直观了解) 传统组件编写:不同的HTML引入不同的样式和行为文件 组件方式编写:组件单独,复用率高(前提组件拆分十分细致) 理解为 ...

  5. vue 组件 - 非单文件组件

    一.定义组件 const school = Vue.extend({name: 'xuexiao', // ----------------------------> 指定组件在开发者工具中显示 ...

  6. Vue自定义组件——非单文件组件

    使用 component 或 components <div id="root"><h1>{{msg}}</h1><school>& ...

  7. render注册一个链接组件_vue 动态加载并注册组件、 且通过 render动态创建该组件...

    基于 iview Tabs 组件实现 功能:为每个 tab 动态创建不同的.特定的组件内容,而不需要大量的 import 组件并进行 component 注册 Index.vue import loa ...

  8. render注册一个链接组件_详解vue 动态加载并注册组件且通过 render动态创建该组件...

    基于 iview Tabs 组件实现 功能:为每个 tab 动态创建不同的.特定的组件内容,而不需要大量的 import 组件并进行 component 注册 Index.vue import loa ...

  9. render注册一个链接组件_[vue]render函数渲染组件

    常规渲染组件 1.放到对应的插槽 2,不会覆盖 {{msg}} let login = { template: " login zujian " }; let vm = new V ...

最新文章

  1. 使用VC内嵌Python实现的一个代码检测工具
  2. 文件菜单服务器属性,服务器属性(“数据库设置”页) - SQL Server | Microsoft Docs...
  3. 常见的HTTP Method深度解析
  4. 入网许可证_入网许可证怎么办理,申请流程
  5. #Java编程题-百钱百鸡
  6. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·002【SQL介绍、数据库的CRUD操作(DDL语句)】
  7. Linux的FTP安装、使用和配置(FTP客户端管理工具)
  8. 2022/3/27 Java开发之Java web编程 第十一章 Ajax交互扩展
  9. Gym 102028D Keiichi Tsuchiya the Drift King(2018 ICPC 焦作站 D 题) 计算几何
  10. 现在流行的网络直播都需要什么设备?
  11. Android-代码设置TextView字体加粗或者不加粗
  12. linux who命令详解,Linux who命令实例详解
  13. 使用vi编辑器创建文本文件
  14. C++ accumulate
  15. 如何实现外网访问内网ip?公网端口映射或内网映射来解决
  16. IO到NIO的前因后果,以及NIO的用法(2)——Selector、Channel
  17. JS判断客户端是手机还是PC
  18. 【初等数论】【转载】夜深人静写算法(五) - 初等数论
  19. 迅雷linux面试题,迅雷2014校园招聘笔试题
  20. 如何使用api调用数据?

热门文章

  1. 【干货】PPT宝典:结构化思考,图形化表达.pdf(附下载链接)
  2. 【报告分享】2020中国后浪生存图鉴.pdf(附下载链接)
  3. pytorch3d在linux下安装
  4. 腾讯广告招人啦,校招优质岗位你不容错过!
  5. 为什么使用3msip2协议_知识卡片 | 链路状态路由协议OSPF凭什么会取代RIP?
  6. xp彻底删除mysql_xp彻底清除mysql数据库
  7. 独立站可以一个人做吗?
  8. 读书笔记——计算机组成原理
  9. 西瓜书+实战+吴恩达机器学习(八)监督学习之朴素贝叶斯 Naive Bayes
  10. odis工程师一键导入导出匹配数据信息功能_机械重复做了这么久,才发现竟然可以批量用户导入导出...