後端的數據都是有對象的,那前端需不須要呢,很是須要!!!
其實,這個庫,咱們已經用了2年了。javascript
咱們將前端全部使用的業務數據模型都定義出來了。
那在實際應用中,有什麼用處呢?
減小了無數的冗餘代碼,避免了很是多容易產生的bug。html
咱們已經沒有出現過什麼提交接口,日期忘記轉換的問題了?
也沒有出現過什麼由於數據缺失,致使頁面報錯的問題,好比一些:{{user.org.title}}這種展現。前端
話很少說,把模型工具甩出來吧:vue
經過如下方式便可安裝使用java
npm install js-model --save
複製代碼
分享一下連接地址:git
同時,這裏用到的日期格式工具是manba,日期format格式能夠參考manba的文檔。github
其餘先不說,先把咱們的應用說一下吧。npm
如下場景使用vue爲示例後端
原始頁面工具
<script> export default { data () { return { obj: null, } } } </script>
<template>
<div>
<span v-if="obj">{{obj.a}}</span>
<span v-if="obj&&obj.a">{{obj.a.b}}</span>
<span v-if="obj.c">{{obj.c}}</span>
</div>
</tempalte>
複製代碼
問題:對象值初始定義欠缺。
使用model
Detail.js
export default new Model({
a: {
b: String
},
c: Number
})
複製代碼
<script> import Detail from './Detail' let obj = Detail.parse({}); </script>
<template>
<div>
<span>{{obj.a}}</span>
<span>{{obj.a.b}}</span>
<span>{{obj.c}}</span>
</div>
</tempalte>
複製代碼
其中
//obj的結果爲
{
a: {
b: null
},
c: null
}
複製代碼
vue簡單的demo: codepen.io/vvpvvp/pen/…
原始頁面
<script> let a = {int: 1} //使用這種方式賦值,vue會沒有辦法更新a.date, a.money這樣的數據 </script>
<template>
<div>
<input v-model="a.int"/>
<DatePicker v-model="a.date"/>
<input v-model="a.money"/>萬
</div>
</tempalte>
複製代碼
使用model
Edit.js
export default new Model({
int: Number,
date: {
type: Date,
format: 'YYYY-MM-DD' //此處使用manba日期工具
},
money: {
type: Number,
unit: Model.W
}
})
複製代碼
<script> import Edit from './Edit' let a = Edit.parse({int: 1}); //在vue的v-model或者其餘地方,能夠直接引用a.date等數據。 </script>
<template>
<div>
<input v-model="a.int"/>
<DatePicker v-model="a.date"/>
<input v-model="a.money"/>萬
</div>
</tempalte>
複製代碼
其中
//a的結果爲
{
int: 1,
date: null,
money: null
}
複製代碼
原始頁面
<script> //js let a = {int: 1, date: 1522302335544, money: 10000}; if (a.data) { a.date = format(a.date); //爲了編輯的展現 } if(a.money){ a.money = a.money / 10000; } //爲了編輯的單位,順便說一下,咱們的金額在數據都是存儲以元爲單位的。 //提交的時候 if (a.int) { a.int = parseInt(a.int) } if (a.data) { a.date = new Date(a.date).getTime(); } if(a.money){ a.money = a.money * 10000 } //submit </script>
<template>
<div>
<input v-model="a.int"/>
<DatePicker v-model="a.date"/>
<input v-model="a.money"/>萬
</div>
</tempalte>
複製代碼
使用model
<script> import Edit from './Edit'; let a = Edit.parse({int: 1, date: 1522302335544, money: 10000}); //提交的時候 let data = Edit.dispose(a); </script>
//template
<div>
<input v-model="a.int"/>
<DatePicker v-model="a.date"/>
<input v-model="a.money"/>萬
</div>
複製代碼
其中
<script> //a的parse結果爲 ============= { int: 1, date: "2018-03-29", money: 1 } ============= //提交的時候 let data = Edit.dispose(a); // 將空值刪除,按照格式轉換出標準化的數據,還有更多的配置選項能夠選擇。 // 若是數據無變動,將轉換爲:{int: 1, date: 1522302335544, money: 10000} // 若是編輯的數據爲{int: "1", date: null, money},將轉換爲:{int: 1} // 上面的int會經過輸入框編輯變成String </script>
複製代碼
看到上面三個場景,相信你應該清楚咱們的javascript數據模型是作什麼用的了。
parse:
dispose:
例:經過input修改的數值爲String, 經過dispose轉換成數字格式。
但願你們多多支持咱們的組件庫HeyUI
HeyUI,🎉UI Toolkit for Web, Vue2.0