vue iframe 中写script_vue: 单文件组件 render函数
使用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 = falsenew 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函数执行效率高
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>render函数</title>
</head>
<body><div id="app"></div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>new Vue({el: "#app",render: function(createElement) {return createElement('div', ['hello, world!', createElement('p', ['fanghuayong'])])}})
</script>
</body>
</html>
第二种用法: 只传一个参数(是对象 组件的配置项)
回顾一下组件: 第一参数是名称,第二参数是配置项
// 第一参数组件名称
// 第二参数组件配置项
Vue.component("my-com", {template: "<div>{{ name }}</div>",data(){return {name: "fanghuayong"}}
})
把组件配置项赋值给一个变量,再传入createElement函数中
代码如下: 组件配置项也可以有两种写法
template模版: 好写,但还是要编译
render函数: 不好写,但是不需要编译,执行效率高
var app = {// template: "<div>{{ name }}</div>",// 这种方法也是需要编译的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: "<div>name</div>"// 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文件
<template><div id="app1"><img alt="Vue logo" src="./assets/logo.png">{{ name }}<HelloWorld msg="Welcome to Your Vue.js App"/></div>
</template><script>
import HelloWorld from './components/HelloWorld.vue'export default {name: 'app',data() {return {name: "fanghuayong"}},components: {HelloWorld}
}
</script><style>
#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;
}
</style>
-------------写个小项目-----------------------------
提醒: template模版需要一个根节点
可以直接写在App.vue中,但是我们要进行组件化开发
注册全局组件
- 在src下创建一个server.vue文件
server.vue的代码
// server.vue的代码
<template><div><p>服务器的状态: {{ status }}</p><hr><button @click="changeStatus">转换</button></div>
</template>
<script>
export default {data() {return {status: '运行中',}
},methods: {changeStatus: function() {this.status == '运行中' ? this.status = '结束' : this.status = '运行中'}}
}
</script>
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中的代码
<template>// 直接使用标签就可以了<app-server></app-server>
</template><script>export default {}
</script><style></style>
注册局部组件
在src下新建一个serverStatus.vue文件
serverStatus.vue代码
<template><div><p>服务器的状态: {{ status }}</p><hr><button @click="changeStatus">转换</button></div>
</template>
<script>
export default {data() {return {status: '运行中',}},methods: {changeStatus: function() {this.status == '运行中' ? this.status = '结束' : this.status = '运行中'}}
}
</script>
server.vue代码
<template><app-server-status></app-server-status>
</template>
<script>
// 引入它的配置项
import ServerStatus from "./serverStatus.vue"export default {// 注册局部组件components: {"app-server-status" : ServerStatus}}
</script>
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代码
<template><app-server></app-server><!-- 这是一个全局组件 -->
</template><script>export default {}
</script><style></style>
小结: 入口文件main.js的配置项是App.vue,App.vue中有一个全局组件标签app-server,这个标签是server.vue中的,server.vue中又有局部组件serverStatus.vue
vue iframe 中写script_vue: 单文件组件 render函数相关推荐
- render注册一个链接组件_vue: 单文件组件 render函数
使用vue-cli创建的vue项目,如何在这种项目中使用组建? 首先创建项目.启动项目 我们再来了解一下目录结构,src文件夹是写逻辑代码的地方,public是最终渲染到浏览器的地方. 在public ...
- Vue学习笔记(2) 在html文件中创建Vue实例,并使用http-vue-loader注册单文件组件
本篇博客基于Vue2.x 官方文档:https://cn.vuejs.org/v2/guide/instance.html 最近和同学合作一个设备信息管理的小项目,而同学找的模板不是前后端分离的 因此 ...
- html引用单文件组件,vue之单文件组件 纯网页方式引入
上一节的vue组件开发是把组件内容统一放到了一个js文件里面 里面写上模板字符串(引用组件) 这种方式还需要拼接转义 写法非常丑陋 vue贴心的帮我们封装了单文件组件 可以不用再模板里面拼接字符串 下 ...
- Vue 单文件组件||Vue 单文件组件的基本用法||webpack 中配置 vue 组件的加载器|| 在 webpack 项目中使用 vue
Vue 单文件组件 传统组件的问题和解决方案 1. 问题 1. 全局定义的组件必须保证组件的名称不重复 2. 字符串模板缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \ 3. 不支持 CS ...
- vue教程2 【Vue组件化编程】 组件的创建和使用 非单文件组件和单文件组件的区别
组件 实现局部功能的代码和资源的集合 非单文件组件 1.定义组件(创建组件) 2.注册组件 3.使用组件(写组件标签) 定义 使用Vue.extend(options)创建,其中options和new ...
- Vue单文件组件与vue-loader
单文件组件 Vue.js是一个渐进式的js框架,在使用wewbpack构建Vue项目时,可以使用一种新的构建模式: .vue单文件组件. 就是一个后缀名为.vue的文件,在webpack中使用vue- ...
- Vue之非单文件组件介绍
简介 主要介绍非单文件组件的方式创建Vue组件.使用. 非单文件组件指的是一个文件中包含多个vue组件. 非单文件组件实际上是html文件. 使用组件化主要分为三步: 编写组件. 注册组件. 使用组件 ...
- Vue之单文件组件的数据传递,axios请求数据及路由router
1.传递数据 例如,我们希望把父组件的数据传递给子组件. 可以通过props属性来进行传递. 传递数据三个步骤: 步骤1:在父组件中,调用子组件的组名处,使用属性值的方式往下传递数据 <Menu ...
- vue单文件组件导入导出
目录分析 打开项目,依次分析下目录结构,项目目录结构如下 项目目录结构如下 单文件组件.vue 目完成后,我们看到src 目录下有一个componets 目录,里面有一个 HelloWorld.vue ...
最新文章
- Java开发-Redis客户端Jedis
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用...
- 最长上升子序列_动态规划 最长上升子序列LIS
- 实操教程|用不需要手工标注分割的训练数据来进行图像分割
- Spring MVC之基于java config无xml配置的web应用构建
- 2019重庆整治金融乱象出实招:依法处置高风险机构 推进网络借贷风险专项整治...
- HTML全面深入学习-用label获得焦点
- Ubuntu下deb文件安装方法图文详解
- linux网桥中stp分析,linux网桥中stp分析
- java中获取日期属于哪一年的第几周
- 堆和栈的区别,有一个64k的字符串,是放到堆上,还是放到栈上,为什么?
- 报错:Torch not compiled with CUDA enabled看这一篇就足够了
- java防止重复提交
- 【地图导航】3D地图软件是如何做路径规划的?为什么准确率这么高
- 【LeetCode】1337. 矩阵中战斗力最弱的 K 行(C++)
- sap 获取计划订单bapi_【原创】2011.09.18 SAP 订单中修改订单净价
- 训练小米叫,让狗狗叫还真的不容易!
- 几何重数(geometric multiplicity)与代数重数 (algebraic multiplicity)
- RSA算法加密解密举例
- 敏捷开发中的sprint是什么意思_百度知道
热门文章
- celery定时任务简单使用
- Google Test
- HTTPS性能分析小工具HTTPStat
- hbase 中的LSM树存储引擎
- springcloud——eureka小错误Caused by: java.net.UnknownHostException: eureka7003.com
- 【Java虚拟机】Java虚拟机深度讲解、VisualVM工具、JVM调优
- 【PAT甲级 补全前导0 vector作为函数参数】1025 PAT Ranking (25 分) Java、C++
- PAT1049 数列的片段和 (20 分)
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- 什么?注释里面的代码居然能够执行