接上回vue
一些本質數組
本質上,vue,無非是維護options,每一個Vue對象的初始化配置對象不觸及Vue內部而言,在外部想怎麼改都是能夠的,只要保證options的正確,一切都不是問題。服務器
讀取this
讀取不用再聊了,一句話,遠程請求,只要服務器答應,這個不麻煩。url
讀取以後的處理spa
上回,忙着把他渲染出來,因此都沒想過其餘事情,那可作的事情其實不少。插件
例如code
1. 放到localstrage裏面存起來,這對於複用組件是會提速不少的不用http協議傳輸,只在本地讀取一個字符串component
2. 或者在本地存成vue文件,隨時讀取均可以對象
3. 更異想天開的能夠組織好options發回服務器,下次一次性讀上來,也沒問題,彷佛觸及了某些編譯的原理,想一想罷了,再研究。
由於
想法不少,仍是不要好高騖遠,js 對對象序列化這一部分,我還沒來得及百度,也不知道對象的方法要如何存儲,只有整篇vue存起來,如今看仍是比較簡單的。
爲了極大的簡化(偷懶)vue文件的編制工做,import 什麼的不如一步到位都省略掉,開發者無需關心組件的加載問題,只要寫好關聯便可,就像這樣
<template> <div> <p>this is father,he has a son</p> <p>{{msg}}</p> <button @click="say">say</button><button @click="saytoson">saytoson</button> <son :msgfromfather = msgtoson></son> <hr></hr> </div> </template> <script> { name:'father', data:function(){return{ msg:"", msgtoson:"" }}, methods:{ say:function(){ this.msg="father said:Hello there!" }, saytoson:function(){ this.msgtoson = "father said to son:hi,son" } }, components:['components/son'] } </script> <style> </style>
script部分,再也不有任何涉及到調用組件方法的部分,把 components屬性變成數組,直接存儲目標的路徑便可,在解析過程當中自動替換成包含 子組件對象的對象便可
轉換完應該相似components:{{name:'son',methods ... .}}這樣的對象,想法到了,一切都是順其天然的,由於代碼其實是最簡單的部分。
新鮮出爐的插件就像下面這樣。
var vcl = { install: function(Vue, Options) { Vue.create = function(options) { importCpts(options) return new Vue(options) } importCpts = function(options) { //存在組件列表 if(options.components) { //組件列表是數字 if(options.components instanceof Array) { var tmpCpts = options.components options.components = {} tmpCpts.forEach(function(item) { var newCptOption = LoadFile(item) options.components[newCptOption.name] = newCptOption }) } } } LoadFile = function(url) { var url1 = window.location.href + url + '.vue' var context = "" var result = {} var stg = localStorage.getItem(url1) if(stg) { context = stg } else { RequestVue(url1, function(r) { context = r localStorage.setItem(url1,context) }) } if(context) { var script = GetTagContext('script', context) var options = eval("(" + script + ")") importCpts(options) 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(vcl)
直接把 new Vue也包裝起來,全部optinos在使用以前,都去importCpts一下,去檢查有沒有子組件components存在,有就load一下,沒有就過。清晰明瞭
而且,若是須要加載,也先去localstrage去看一眼,有的化就不用遠程加載了,省事了。
重定義的一些東西
由於插件的緣由,對vue文件,和項目從新定義了一些格式上的規範
1. 入口
Vue.create() 方法,該方法接受一個options,也能夠簡寫成 Vuecreate({el:'#xxx' .. ...})
2. vue文件中 <script> 部分,直接{...} 無需加載組件
3. components變成數組 like components:['subcomponentspath'] , 該數組存儲子組件的路徑,路徑的格式是 目錄/文件名,無後綴,全部組件是從根目錄開始的,懶,沒研究相對路徑,先這麼寫吧
4. 其餘的,本身去發現吧,想不起來了。
未完待續,後面再去便利化,是惟一的目標。