Vue.js一个文件对应一个组件实践


Posted in Javascript onOctober 27, 2016

这方面官网给的示例是需要工具来编译的,但是nodejs又没有精力去学,只好曲线救国。VueJS的作者在另一个网站有一篇文章讲到可以用jQuery.getScript或RequireJS实现组件,却没有给示例,于是自己摸索出了一种方法。

用到的工具:

vue.js --- 0.12.+ (需要0.12中async component支持)
require.js
text.js --- RequireJS text plugin https://github.com/requirejs/text

文件列表

index.html
index.js
comp.js (组件在这里定义)
comp.html (组件的模板)

实际上组件分成了js和html,html是模板内容,这里似乎与“一个文件对应一个组件”稍有不符,但如果模板内容比较多,这是有必要的,也更便于维护。 直接上代码。

comp.html -- 组件模板

<h2>{{title}}</h2>
<p>{{content}}</p>
comp.js -- 组件定义
define(['text!comp.html'], function (temp) { // 在requirejs中定义一个模块,依赖为模板文本
 return {
 props: ['title', 'content'],
 template: temp
 }
});

至此,一个简单的模板就建好了。然后就是在VueJS中注册这个组件。

index.js

require.config({
 paths: { // 指定text.js和vue.js的路径,不需要.js后缀,详见RequireJS文档
 text: '../../../assets/requirejs/text',
 vue: '../../../assets/vue/vue'
 }
});

require(['vue'], function (Vue) { // 依赖vue.js
 Vue.component('comp', function (resolve) { // 注册一个异步组件
 require(['comp'], function (comp) { // 因为我们要按需加载组件,因此require(['comp'])必须在function里
 resolve(comp)
 })
 });
 new Vue({
 el: 'body'
 });

 //new Vue({
 // el: 'body',
 // components: {
 // comp: function (resolve) {
 // require(['comp'], function (comp) {
 // resolve(comp)
 // })
 // }
 // }
 //});
});

index.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title></title>
</head>
<body>

<component is="comp" title="我是一个组件" content="fjkldsjfkldjsklgjks"></component>

<script data-main="index" src="../../../assets/require.js"></script>

</body>
</html>

运行代码,把<component>注释掉就能看到区别。

如果组件比较多,注册组件就会很繁琐,因此可以把这部分提炼出来。

改进后的index.js

require.config({
 paths: {
 text: '../../../assets/requirejs/text',
 vue: '../../../assets/vue/vue'
 }
});

function conponent(name) {
 return function (resolve, reject) {
 require([name], function (comp) {
 resolve(comp)
 })
 }
}

require(['vue'], function (Vue) {
 Vue.component('comp', conponent('comp'));
 Vue.component('comp2', conponent('comp2'));

 new Vue({
 el: 'body'
 });
});

至此。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 10件让人费解的事情
Feb 15 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
Apr 26 Javascript
JS实现日期加减的方法
Nov 29 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
Oct 24 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
关于javascript的一些知识以及循环详解
Sep 12 Javascript
详解node中创建服务进程
May 09 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 Javascript
详解webpack4.x之搭建前端开发环境
Mar 28 Javascript
详解JavaScript中的坐标和距离
May 27 Javascript
RxJS在TypeScript中的简单使用详解
Apr 13 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
Oct 27 #Javascript
node.js文件上传处理示例
Oct 27 #Javascript
Vue.js表单控件实践
Oct 27 #Javascript
vue实现可增删查改的成绩单
Oct 27 #Javascript
vuex实现简易计数器
Oct 27 #Javascript
微信小程序  生命周期详解
Oct 27 #Javascript
require.js+vue开发微信上传图片组件
Oct 27 #Javascript
You might like
PHP图片上传代码
2013/11/04 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
幼儿园大班毕业教师寄语
2014/04/03 职场文书
李培根演讲稿
2014/05/22 职场文书
2014年学校工作总结
2014/11/20 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
java版 简单三子棋游戏
2022/05/04 Java/Android