本文共 30543 字,大约阅读时间需要 101 分钟。
对react-native全局进行配置,对内置对象原型链增加方法,增加常用全局方法.
每次新建react-native项目之后都会发现有一些很常用的方法在这个项目中也会用到,有些对全局的配置(禁用模拟器上显示黄框,release发布版本中时console打印失效等).这些如果在新项目中在搞一次的话的确是很麻烦,所以我就将其封装成了这个库.
github地址:
npm地址:
{
{TOC}}npm install react-native-gp-utils --save
首先导入插件
0:非侵入式:每个要用到的方法的文件中都要导入指定的工具类,并以工具类.方法名
的方式调用方法.
工具类.方法名
方式调用方法,内建对象以arr.unshiftFromIndex
的形式调用.-- 优点:相对方便,只用入口文件导入一次,其他文件都可以使用.-- 缺点:会占用与各个工具类名相同的全局变量的属性(也可把各个工具类名定义为自定义的变量名),以及各个内建对象(Array,String对象等)的prototype原型链的与方法名相同的属性方法名
方式直接调用方法,内建对象以arr.unshiftFromIndex
的形式调用.-- 优点:非常方便,在入口文件中导入一次即可,在任何地方使用任何方法,只用直接用方法名就可以调用方法.-- 缺点:会占据各个工具类中所有和方法名相同的全局变量(会造成全局变量污染),和各个内建对象(Array,String对象等)的prototype原型链的与方法名相同的属性导入库->设置配置选项(可选)->自定义各个库文件名(可选,在侵入式等级1中使用)->给出侵入式等级初始化
import GPUtils from 'react-native-gp-utils';
GPUtils.configs={yellowBoxOn:true}; //这里设置打开警告提示黄框
//这里表示将CommonUtils,ArrayUtils工具类的名称分别自定义为CU,AU,没给出的按默认的工具类的名称.GPUtils.namesMap={CommonUtils:'CU',ArrayUtils:'AU'};
// let {CommonUtils,ArrayUtils}=GPUtils.initWtihInvadeScale(0);// 也可以向下面这样为之自定义名称let {CommonUtils:CU,ArrayUtils:AU}=GPUtils.initWtihInvadeScale(0);
GPUtils.initWtihInvadeScale(1); //自定义名称在上面第3步
GPUtils.initWtihInvadeScale(2); //完全侵入,不支持自定义名称(因为每个方法名都会成为全局变量)
|:-----------:|:-----------:|:-----------:|
|配置项|说明|默认值||yellowBoxOn|指定警告黄框(即在打印warn警告信息时,模拟器先放出现的警告黄框)是否开启|false:关闭(系统默认是开启)||releaseLogOn|指定是否在release发布版本中打印log的信息(release版本中系统默认是不会将console.log打印除去的,但是又不可能发布前特地删一次所有注释,所以直接导入库就行了,默认就会在release版本清除log打印)|false:关闭release版本中的打印|方法的四种类型,下面会有解释
所有方法的详细介绍在下面,这里先用其中几个方法介绍一下调用方式
normal:普通方法.(以CommonUtils中的loop方法(统一管理循环,遍历的方法)为例)
//按照上面方法导入之后CommonUtils.loop(10,(i)=>{console.log(i)}); //输出0到9//可以自定义别名导入,这时的调用方式就位(所有方法类型都可以自定义别名,侵入式1也一样,下面就不累赘写以别名方式调用的内容了)let {CommonUtils:CU}=GPGlobal.initWtihInvadeScale(0);CU.loop(10,(i)=>{console.log(i)});
//和上面侵入式0调用方式一样,只是会占用对应的全局变量
loop(10,(i)=>{console.log(i)}); //直接方法名调用
baseOnInvadeScale类型.(以ArrayUtils中的unshiftFromIndex方法(将数组中指定索引的元素移动到最前面去)为例)
let arr=[1,2,3,4,5];ArrayUtils.unshiftFromIndex(arr,1,3); //结果为[2, 1, 3, 4, 5] 将所因为3的元素移到最前面
let arr=[1,2,3,4,5];arr.unshiftFromIndex(1,3); //因为是数组原型链上的方法,所以直接这样调用,而且相对于侵入式0的滴啊用方法,也少了第一个参数(即当前这个数组),
both类型.(以DateUtils中的getDateDiff方法(计算两个日期时间之间的差值)为例)
let startTimeStr='2017-11-11 11:11:11';let endTimeStr='2017-11-12 10:10:10';DateUtils.getDateDiff(startTimeStr,endTimeStr); //结果为1
//侵入式1提供两种方法,一种是普通方法,调用方式就和上面的侵入式0的调用方式一样;一种是原型链上的方法(向下面这样调用)let startTimeStr='2017-11-11 11:11:11';let date=DateUtils.getDateObj(startTimeStr); //这个方法用于通过字符串,时间戳获得一个日期对象,date此时就为日期对象,详情看下面的介绍.let endTimeStr='2017-11-12 10:10:10';date.diff(endTimeStr); //直接通过这种原型链方法的形式调用,为了简便,在原型链中的方法为diff,both类型方法具体普通方法与原型链方法一不一致,看具体方法中的说明.
//普通方法和侵入式2在normal:普通方法的调用相同//原型链方法和上面侵入式1的调用方式相同
onlyProto类型.(以NumberUtils中的toFloatStr方法为例)
let num=18.12345;num.toFloatStr() //结果为"18.12"
为了方便,下面没有特别说明都以侵入式等级2为例讲解,比较简单的方法就不给出示例了
toStr(obj)
toStr({})// 返回"[object Object]"
判断当前数据的类型的一些列方法:
isNumber(obj)
isString(obj)
isBool(obj)
isArray(obj)
isObj(obj)
isDate(obj)
isRegExp(obj)
getNewObj(obj)
let arr=[1,2,3,4,5];let copyArr=getNewObj(arr);copyArr===arr// 返回false,得到一个至完全相同单地址不同的数组
loop(obj,callBack)
//对指定范围进行循环loop(10,(i)=>{console.log(i)}) //输出0到9//对数组进行循环let arr=[1,2,3,4,5,6,7];loop(arr,(i,k)=>{console.log(i,k)});//输出数组中的每一个索引与其对应的值//对对象进行循环let obj={a:10,b:20,c:30};loop(obj,(k,v)=>{console.log(k,v)})//输出对象中的每一个键值对//loop的回调函数中break,continue不可用,但是可以用return做出break,continue,return的操作//break操作(比如,到5时退出,这时只需要return 1(这里的1可以用任何一个无意义的,不是undefined的值就行)即可)loop(10,(i)=>{ if(i===5){return 1} console.log(i);// 打印出0到4});//continue操作(比如,到5时跳过此次循环,进行下一次循环,只需要return undefined即可)loop(10,(i)=>{ if(i===5){return undefined} console.log(i);// 打印出0-4,6-9});//return操作(比如返回i值,像正常return一样返回即可,该返回值则为loop方法的返回值,可以拿到返回值后做其他操作,也可以再继续将该返回值再次return出去)let result=loop(10,(i)=>{ if(i===5){return i} console.log(i);// 打印0到4});console.log(result);//打印5//可以继续return出去,这样就和正常for循环时的return一样了function test() { return loop(10,(i)=>{ if(i===5){return i} console.log(i);// 打印0到4 });}let result=test();console.log(result);//打印5
getBool(obj)
getFuncName(args)
function Test() { console.log(getFuncName(arguments));}// 打印出Test
isNumeric(strNum,maxDecimalNum=null,ifTrim=true,positive=false)
isNumeric('123.6765')// 结果trueisNumeric('123.6765',2)// 结果falseisNumeric(' -234.67 ',2,)// 结果trueisNumeric(' -546.12 ',2,false)// 结果falseisNumeric(' -123.67 ',2,true,true);// 结果falseisNumeric(123.67,2,true,true);// 结果true
numToFixedLenStr(num,len=2,char='0')
numToFixedLenStr('8') //结果为"08"numToFixedLenStr('18',4) //结果为"0018"numToFixedLenStr('18',4,'*') //结果为"**18"numToFixedLenStr(18,4,'*') //可以是数字
js精确的加减乘除(js对浮点数的运算会存在问题,无论加减乘除,所以加入这些方法).这些方法在NumberUtils和MathUtils中都被加入到Number对象和String对象的原型链中了,名称分别为add,sub,mul,div,详情看相应的方法说明.方法中除了可以传数字,也可以传字符串类型的数字
accAdd(arg1,arg2)
12.4249+6.8 //结果为19.224899999999998accAdd(12.4249,6.8) //结果为19.2248accAdd('12.4249','6.8') //传入参数也可以是字符串类型的数字,结果同上
accSub(arg1,arg2)
10.3-9.2 //结果为1.1000000000000014accSub(10.3,9.2) //结果为1.1
accMul(arg1,arg2)
0.7*8.1 //结果为5.669999999999999accMul(0.7,8.1) //结果为5.67
accDiv(arg1,arg2)
5.67/8.1 //结果为0.7000000000000001accDiv(5.67,8.1) //结果为0.7
dealWithFloatStr=(strNum,toFixed=2,type='round',inputType='both',returnType=true)
dealWithFloatStr('12.3456') //结果为"12.35"dealWithFloatStr('12.3456',1) //结果为"12.3"dealWithFloatStr('12.3456',1,'up') //结果为"12.4"dealWithFloatStr('12.3456',3,'sub') //结果为"12.345"dealWithFloatStr('12.3456',3,'sub','num') //结果为"12.3456"dealWithFloatStr(12.3456,3,'sub','num',false) //结果为12.345
一些常用属性:
w
h
isios
一些常用api的简单封装:
openUrl(url)
openPhone(phoneNum)
setClipboard(test)
get(url,args={})
get('http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=%E9%93%B6%E9%AD%82&bk_length=600',) .then((jsonData)=>{ console.log(jsonData); }) .catch((error)=>{ console.log(error); });
post(url,bodyData,headers={})
//以'Content-Type': 'application/json'方式发送请求时post('http://baike.baidu.com/api/openapi/BaikeLemmaCardApi', {scope:103,format:'json',appid:379020,bk_key:'银魂',bk_length:600}) .then((jsonData)=>{ console.log(jsonData); }) .catch((error)=>{ console.log(error); });//以'Content-Type': 'application/x-www-form-urlencoded'方式发送请求时,需要给出第三个参数headerspost('http://baike.baidu.com/api/openapi/BaikeLemmaCardApi', 'scope=103&format=json&appid=379020&bk_key=银魂&bk_length=600', {'Content-Type': 'application/x-www-form-urlencoded'}) .then((jsonData)=>{ console.log(jsonData); }) .catch((error)=>{ console.log(error); });
一些适配相关的方法:
setFontSize(fontSize)
isPhoneNum(str)
isEmail(str)
pushRegExpKeyToArr(obj,reg)
let arr=['ro123ot','root','fdhfi','raew'];pushRegExpKeyToArr(arr,/ro.*ot/);// 返回["ro123ot", "root"]// 如果传入参数为对象,则返回的数组中的元素是传入对象键(key)中符合正则的的
getRandom(num1,num2)
getRandomNumStr(num1,num2)
getRandomFromArr(arr)
getRandomFromArrWithWeight(arr,weightArr)
let arr=['第一个数','第二个数','第三个数','第四个数'];let weightArr=[1,2,3,4];//loop是该库中的一个方法用于统一管理循环的方法(上面有讲解)loop(10,()=>{ let random=getRandomFromArrWithWeight(arr,weightArr); console.log(random); //这样'第一个数','第二个数','第三个数','第四个数'输出的概率就分别是十分之一,十分之二,十分之三,十分之四});
getRandomStr(num=4,type='all',ifEq=true)
getRandomStr(16,'all',true)// 结果 "7a314W55nupLV8P4" (16位的既有数字又有字母的随机数,且数字和字母出现概率相同)
getRandomPhone()
内建对象的工具类部分:
contains(value,allEqual=true)
deleteValue(value,allEqual=true,deleteAll=true)
let arr=[1,2,3,4,5,2,3,6,1,3,2];arr.deleteValue(3); //结果 [1, 2, 4, 5, 2, 6, 1, 2] ,将多有3的元素都删除了arr.deleteValue(2,true,false) //结果 [1, 4, 5, 2, 6, 1, 2] ,只删除了第一个2的元素arr.deleteValue(2).push(100); //可以对其进行链式操作
spliceOne(index)
sum()
let arr=[1,2,3,4,5,2,3,6,1,3,2,'12','6',1.1,'6.8']arr.sum() //结果为57.9
移动数组元素的几个方法:
unshiftFromIndex(index)
let arr=['现在最新的内容','现在第二新的内容','现在正准备点击之后变成最新的内容','现在最后的内容'];arr.unshiftFromIndex(2) //结果为["现在正准备点击之后变成最新的内容", "现在最新的内容", "现在第二新的内容", "现在最后的内容"]arr.unshiftFromIndex(2).unshiftFromIndex(3) //可以对其进行链式操作
pushFromIndex(index)
let arr=[0,1,2,3,4,5];arr.pushFromIndex(2); //结果为[0, 1, 3, 4, 5, 2]
moveToIndexFromIndex(fromIndex,toIndex)
let arr=[0,1,2,3,4,5];arr.moveToIndexFromIndex(1,3) //结果为[0, 2, 3, 1, 4, 5]
deepCopy()
let arr=[0,1,2,3,4,5];let arr1=arr.deepCopy(); //arr1与arr内容完全相同arr1===arr //返回false,不是同一个对象
eachToFloat(args)
//下面的结果都是JSON.stringify()后的输出let arr=[10,123,'123',[832.123,'1234.123','dsadf12'],{a:10.123,b:'123.86',c:'123dsa'}];let finalArr=arr.eachToFloat({ifChangeArr:false}); //上面arr结果没变,finalArr结果为"[10,123,"123.00",[832.12,"1234.12","dsadf12"],{"a":10.12,"b":"123.86","c":"123dsa"}]"finalArr=arr.eachToFloat({ifChangeArr:false,ifRecursion:false}); //上面finalArr的结果为"[10,123,"123.00",[832.123,"1234.123","dsadf12"],{"a":10.123,"b":"123.86","c":"123dsa"}]"其中的对象和数组就没有参与处理finalArr=arr.eachToFloat({ifChangeArr:false,toFixed:1,type:'up',outputType:'str');//上面finalArr的结果为"["10.0","123.0","123.0",["832.2","1234.2","dsadf12"],{"a":"10.2","b":"123.9","c":"123dsa"}]"arr.eachToFloat({toFixed:3,type:'sub',inputType:'str'});//上面这样就会直接改变数组中相应的值,这样就不用外界用变量接收了.arr的结果为"[10,123,"123.000",[832.123,"1234.123","dsadf12"],{"a":10.123,"b":"123.860","c":"123dsa"}]"
getDateObj(date)
getDateObj('2012-12-12 00:00:00'); //结果成功生成对象Wed Dec 12 2012 00:00:00 GMT+0800 (CST)getDateObj(1455241600000); //可以是时间戳的Int
formatDate(date,formatStr='yyyy-MM-dd hh:mm:ss')
formatDate('2012-12-12') //结果为"2012-12-12 00:00:00"formatDate('2012-12-12 12:12:12','yyyy/MM/dd hh:mm') //结果为"2012/12/12 12:12"formatDate(1455241600000,'yyyy/MM/dd hh:mm') //可以是Int类型的时间戳,结果为"2016/02/12 09:46"let date=new Date();formatDate(date,'yyyy/MM/dd hh:mm') //可以是日期对象date.format('yyyy/MM/dd hh:mm') //因为是both类型的方法,所以可以通过这种形式来调用
addOrSubDate(date,num,dayOrMouth='day',addOrSub='add',ifChangeDate=true,isBehindZero=false)
let dateStr='2012-12-12 12:12:12';addOrSubDate(dateStr,1); //结果为Thu Dec 13 2012 12:12:12 GMT+0800 (CST)addOrSubDate(dateStr,1,'month','sub'); //结果为Mon Nov 12 2012 12:12:12 GMT+0800 (CST)let timestamp=1455241600000;addOrSubDate(timestamp,2,'hour','sub') //也可以是Int类型的时间戳,结果为Fri Feb 12 2016 07:46:40 GMT+0800 (CST)let date=new Date();addOrSubDate(date,2,'hour','sub') //也可以是date对象,结果中改变了原来的date对象addOrSubDate(date,2,'day','sub',false,true) //这样就不改变原来的日期对象了.结果为Sat Oct 20 2018 00:00:00 GMT+0800 (CST)date.addOrSubDate(2,'day','sub',false,true) //因为是both类型的方法,所以可以通过这种形式来调用
addOrSubDateFormat(num,formatStr='yyyy-MM-dd',date='',dayOrMouth='day',addOrSub='add',isBehindZero=false)
addOrSubDateFormat('2012-12-12 12:12:12',1); //结果为"2012-12-13"let date=new Date();date.addOrSubDateFormat(3); 因为是both类型的方法,所以可以通过这种形式来调用
getDateDiff(startTime, endTime, diffType='day',ifAbs=true)
let startTimeStr='2017-11-11 11:11:11';let endTimeStr='2017-11-12 10:10:10';getDateDiff(startTimeStr,endTimeStr); //结果为1getDateDiff(startTimeStr,endTimeStr,'hour'); //结果为23let date=new Date();date.diff(endTimeStr,'month',false); //因为是both方法,所以也可以以这种方式调用.结果为-11
add()
sub()
mul()
div()
let num=5.67;num.div(7)
toFixedLenStr(len=2,char='0')
let num=18;num.toFixedLenStr(4,'*') //结果为"**18"
toFloatStr(toFixed=2,type='round')
let num=18.12345;num.toFloatStr() //结果为"18.12"num.toFloatStr(3,'up') //结果为"18.124"
toFloat(toFixed=null,type='round')
let num=18.12345;num.toFloat(3,'up') //结果为18.124
toDate()
let num=1455241600000;num.toDate() //结果转化为日期对象 Fri Feb 12 2016 09:46:40 GMT+0800 (CST)
objEachToFloat(obj,args={})
//下面的结果是JSON.stringify()后的输出let obj={a:10.12341,b:{a:'10.12412',b:true,c:[10,23.0123,'dsad']},c:'40.1'};objEachToFloat(obj,{toFixed:3,type:'up'}) //结果为"{"a":10.124,"b":{"a":"10.125","b":true,"c":[10,23.013,"dsad"]},"c":"40.100"}"
getSubObj(obj, subObjDatas,empty=null)
getSubObj(obj,'class.people.name')
这种方式通常用在子对象键名确定,固定,不变的情况-- 方式2: getSubObj(obj,['class','people','name'])
. 或者let a='class',b='people',c='name';getSubObj(obj,[a,b,c]);
这种方法通常在子对象键名根据变量改变时的情况,使用后面这种形式调用let obj={class:{otherProple:{name:'zhangsan'}}};obj.class.people.name //这样直接调用就会报错getSubObj(obj,'class.people.name') //用该方法就返回null(也可以自定义不存在时的返回值)let a='class',b='people',c='name'; //模拟键名会根据情况改变时getSubObj(obj,[a,b,c]); //也可以用这种方式调用
gqlObjToString(obj,ifNull=false,num=0)
let obj={a:10.12341,b:{a:'10.12412',b:true,c:[10,23.0123,'dsad']},c:'40.1',d:null,e:undefined,f:'*CONST*'};gqlObjToString(obj);//结果为/*"{ a:10.12341 b:{ a:"10.12412" b:true c:[ 10 23.0123 "dsad" ] } c:"40.1" f:CONST}"*/
subObjDataToObj(obj,dealWithSameSubKey='both',separator='_',allNameKeyArr=null,supKeyArr=[],sameKeyArr=null)
let obj1={a:{test:123},b:{c:{test:456}},d:{c:{test:789}},e:{f:{test:135}}};subObjDataToObj(obj1) //结果为 {a_test: 123, b_c_test: 456, d_c_test: 789, e_f_test: 135}
注意字符串是不能改变的,所以下面的方法如果是和改变字符串相关的都是生成的另一个新的字符串,要用另一个变量来接,元字符串不会发生改变
add()
sub()
mul()
div()
'5.67'.div(7)
toFixedLenStr(len=2,char='0')
let numStr='18';numStr.toFixedLenStr(4,'*') //结果为"**18"
isNumeric()
'123.123dsa'.isNumeric()
,具体用法,看CommonUtils中的方法介绍)toFloatStr(toFixed=2,type='round')
"18.12345".toFloatStr() //结果为"18.12""18.12345".toFloatStr(3,'up') //结果为"18.124"
toFloat(toFixed=null,type='round')
"18.12345".toFloat(3,'up') //结果为18.124
toDate()
'2012-12-12 00:00:00'.toDate() //结果转化为日期对象 Wed Dec 12 2012 00:00:00 GMT+0800 (CST)
getSecStr(leftNum=0,rightNum=0,middleNum=0,secChar='*')
let str='1383838438';str.getSecStr(2,3); //结果为"13****438"str.getSecStr(2,3,8); //结果为"13*******438"getSecStr(str,2,3,8); //结果同上,也可以以普通方法调用
insertSpace(numStr,spacePositions=4,loop=true)
//下面的信息都是乱写的let bankCard='6212262201023557228';bankCard.insertSpace(); //结果为"6212 2622 0102 3557 228",这是用于银行卡号的情况.let IDNum='123456199507281234';IDNum.insertSpace([6,8,4]); //结果为"123456 19950728 1234",这是用于×××时的情况.let phone='13383838438'; //结果为"133 8383 8438",这是用于手机号时的情况.let random='213649213892749217392147236294';random.insertSpace([2,4,3]) //结果为"21 3649 213 89 2749 217 39 2147 236 29 4",默认会循环random.insertSpace([2,4,3],false); //结果为"21 3649 213 892749217392147236294",不循环时insertSpace(random,[2,4,3],false) //因为是both类型的方法,所以也可以通过普通方法的形式调用
indexdWithNum(char,n)
let str='root123rootdsahkroot123';str.indexdWithNum('root'); //结果为0str.indexdWithNum('root',3); //结果为16
insertToIndex(inserts,indexs)
let str='I you';str.insertToIndex(' love',1); //结果为"I love you"str='I you,I you';str.insertToIndex(' love',[1,7]) //结果为"I love you,I love you"str.insertToIndex([' love',' hate'],[1,7]) //结果为"I love you,I hate you"
getStrCount(strOrReg)
let str='root123rootdsro132otahkroot123';str.getStrCount('root'); //结果为3str.getStrCount(/ro.*?ot/g) //结果为4,注意,得加上修饰符g,不然会返回1
trimFunc(char=' ',type='lr')
let str=' I love you ';str.trimFunc(); //结果为"I love you"str.trimFunc('all') ;//结果为"Iloveyou"str='---I--Love--you---';str.trimFunc('l','-') //结果为"I--Love--you---"trimFunc(str,'l','-') //因为是both类型,也可以以普通方法的形式调用
toUpperFirst(ifOtherLower = true)
let str='I lovE yoU';str.toUpperFirst(); //结果为"I Love You"str.toUpperFirst(false); //结果为"I LovE YoU"
其他方面的工具类部分:
formatFileSize(size)
formatFileSize(1236821); //结果为"1.18MB"formatFileSize(1236821213); //结果为"1.15GB"
getBaseName(path)
getBaseName('somedir/to/test.js') //结果为"test.js"
getDirName(path)
getDirName('somedir/to/test.js') //"somedir/to"
getFileType(filePath,haveDot=false)
getFileType('somedir/to/test.js') //结果为"js"
pathJoin(dirPath,fileName)
pathJoin('somedir/to','test.js'); //结果为"somedir/to/test.js"
logFuncName(args)
function Test() { logFuncName(arguments);}打印出***********************************Test***********************************function Test() { logFuncName(arguments,'App','-',20);}打印出--------------------App--------------------Test--------------------
getLorem(wordCount=30)
getLorem() //结果为"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nkiuaoxuidbej hdkgnsmf nztqmp ngxsuxmxryubb kkuuegcnj npwtikvax jeitrhdtm, hjmmflmcqf qwhynmxw. Wpt ddoqkvpeaa dymecfpet, mqwhgngubpzbu. Asmthth jlsef fkznuhorv uwexlhzx owpyryoxxww eugqf cdefdkeatlii, ppcfamku. Gqpslqmmyg?"getLorem(15) //指定单词数目为15.结果为"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sckyejb hdrko, zqkiuuudb iwuvzwpqll, ycvceyrlgadw yuzwcqjezdsq qnxho,."
getDataFromNetTest(pageLen=20,page=1,ms=3000,max=100)
getDataFromNetTest() .then((res)=>{console.log(res)}); //这里结果为3秒钟后打印出一个长度20的数组,数组中每条元素就是一个对象,该对象里面 //{index:当前数据的索引(即对几条数据),name:一个随机生成的名字,age:随机年龄,phone:随机电话号码,text:随机的一串文字(上面的getLorem方法)}. //这里的对象格式现在是固定的,后面可能会将其改为可以从参数中传递来.
整理了好几整天终于整理完了,现在方法还比较少,不过还是算都比较常用的.
如果大家觉得我的组件好用的话,帮到你的话,欢迎大家Star,Fork,如果有什么问题的话也可以在github中想我提出,谢谢大家的支持.
转载于:https://blog.51cto.com/13997566/2307659