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 相关文章推荐
jquery $.fn $.fx是什么意思有什么用
Nov 04 Javascript
JS中类或对象的定义说明
Mar 10 Javascript
js获取上传文件大小示例代码
Apr 10 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
javascript跨域的方法汇总
Oct 23 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 Javascript
vue.js的提示组件
Mar 02 Javascript
用jquery获取select标签中选中的option值及文本的示例
Jan 25 jQuery
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
Jul 13 Javascript
vue 授权获取微信openId操作
Nov 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模块 Memcached功能多于Memcache
2011/06/14 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
跟老齐学Python之一个免费的实验室
2014/09/14 Python
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
python计算时间差的方法
2015/05/20 Python
Python中is与==判断的区别
2017/03/28 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
追悼会答谢词范文
2015/09/29 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书