上回模仿了一个nw,按照原理说,简单。javascript
今天说Vue,脚手架是个好东西,作项目都给你配置好,nodejs很牛,不过对于我这种只想作一个界面的人来讲,有点儿太大了,用不上。html
若是说,不用脚手架 nodejs要面临哪些问题呢。前端
1. 组件,组件文件vue,用的是es6语法,目前大多数浏览器不支持,其实就两个命令 import export,为了这点儿东西,哎,想一想就烦。vue
2. 不用组件呢?,vue的灵魂就两个,一个是mvvm模式的绑定,二个就是组件,确实想用。java
无法想,本身加载吧,咱们来聊一聊,手动加载vue文件组件吧。node
先来分析一下jquery
1.vue是个什么东西:简单说,是一个对象,咱们构建新的vue对象时候,要提供一个配置对象options,关键就在这个配置对象上。es6
它包含了正则表达式
el:挂载点element后端
data:数据
methods:方法
.....
那么,
2 . 组件是什么东西呢,嗯,简单的说也是一个对象,这个对象和vue配置类同样啊,多了一个template模板而已
它也和vue配置对象同样,包含那几样东西。
3. vue文件是什么东西呢,vue文件包含了什么呢,简单的说,包含了组件的模板和配置类options。
ok,如今清楚了,若是咱们把vue文件解析一下,组合出一个配置类,也就是制造一个options,把模板放进去,他就是一个组件的配置类options
再经过一些文档上指出的组件加载方式,彻底能够,自行,动态的,加载vue文件,而不用脚手架,固然了,vue文件,自己也能够本身写,不用es6格式,有什么所谓呢。反正造出来就行了
重点,算是重点吧,具体要分哪几步
1. 加载vue文件,无法,js是前端语言,要想问后端要文件,那就httprequest,httprequest是js原生的请求类,要是以为麻烦,jquery里面也有ajex是这么写吧,我没用过,vue-resource也提供了同样的功能,此外还有好多,不列举了
重点是,必定要用同步的请求去作咱们要作的事,无论你用什么插件,仍是用原生的,这里我说,原生的好搞一些。
2. 分析vue,文件读上来了,分析也不叫分析吧,这太简单了,字符串分析,方法太多了,一个一字看,也行,分隔符分割也行,固然还有正则表达式,咱们要作的提取个部分,<template>部分,<scripte>部分,<style>部分
3. 组合,制造一个options对象,随你造咯,造好返回一个对象给Vue就行了。
全局对象就Vue.components()
局部对象就,组件options.components上面加一下。
我简单写了一个插件,用做配合非脚手架加载vue,不如看一下,我想也就都不用说了。
var vueloader = { install : function(Vue,options){ Vue.ImportFrom = function(url){ url = window.location.href + url var result RequestVue(url,function(r){ var context = r if(context){ var script = getTagContext('script',context) var options = eval("("+script+")") options.template = getTagContext('template',context) result = options } }) return result } } } function RequestVue(url,cb) { let request = new XMLHttpRequest() request.user='' request.open('GET',url,false) request.send(null) if (request.status === 200){ cb(request.responseText) } } function getTagContext(tag,str){ var reg = new RegExp("<"+tag+">([\\s\\S]*)<\/"+tag+">") var matchs = reg.exec(str) return matchs[1] } Vue.use(vueloader)
插件要提供install方法,两个参数Vue,options
往Vue上挂一个方法importVue,而后最下面Vue.use 这个插件。
在你的 html中 <script src="vue-component-loader.js" type="text/javascript" charset="utf-8"></script>
这是个人插件文件名
以后,随便在js里面用了。
通过,个人一顿分析,eval()是个很牛逼的方法,它能够执行script,从而简化了不少麻烦事
我找个vue文件你看
<template> <div> <p>this is father:{{msg}}</p> <p><button @click='say'>Say</button></p> <cson :msgfrom = msgfromfather></cson> </div> } </template> <script> { name:'cfather', data:function(){return{ msg:"", msgfromfather:'msg from father' }}, methods:{ say:function(){ this.msg = "hello you!" this.msgfromfather = 'father:hello from father' } }, components:{'cson':Vue.ImportFrom('cson.vue')} } </script> <style> </style>
这是我写的vue文件,也是分来来template和script这些
那么,我不须要写 export default了,我直接一个对象就行了,由于个人解析工具里面,直接把这个对象字符串用eval()给实例化了
第二点, components:{'cson':Vue.ImportFrom('cson.vue')}
这里直接把插件里的加载方法写进去了,而后eval直接给执行了,多省事。
那么,该说的就说完了,回见了。