Methods
cloneDeep(value) → {Array|Object}
克隆对象或数组
Parameters:
Name | Type | Description |
---|---|---|
value |
Array | Object | 源数据 |
- Source:
Returns:
- 返回新的数据
- Type
- Array | Object
Example
import { cloneDeep } from 'digi'
const obj = { a: 123 }
const newObj = cloneDeep(obj)
console.log(obj === newObj)
// => false
console.log(obj.a === newObj.a)
// => true
createData(data, watch) → {Object}
创建可监听对象
Parameters:
Name | Type | Description |
---|---|---|
data |
Object | 源对象 |
watch |
Object | watch = { path1: fun1, ..., pathN: funN }; path = 源对象路径; fun = (newVal, [oldVal]) => {}; |
- Source:
Returns:
- 返回可监听对象
- Type
- Object
Example
import digi, { createData } from 'digi'
import refs, { allotId } from 'digi-refs'
digi.plugins([refs])
// 创建监听数据
const data = createData({ a: 123 }, { watch: {
a: (newVal, oldVal) => {
console.log(`watch a => newVal: ${ newVal }, oldVal: ${ oldVal }`)
}
}})
// 分配标记id
const textRefId = allotId()
// 添加元素
digi({ ref: textRefId, text: data.$tp('a') })
console.log(refs[textRefId].outerHTML)
// => <div>123</div>
data.a = 321
// => watch a => newVal: 321, oldVal: 123
console.log(refs[textRefId].outerHTML)
// => <div>321</div>
createElement(data) → {Object}
创建元素
Parameters:
Name | Type | Description |
---|---|---|
data |
String | Object | Undefined | data = tagName || { ...元素属性 }; 扩展元素属性:{ child: 子元素, text: 文本节点 }; child = data 或 [data1, ..., dataN]; 子元素的属性名为 'child' 或 'child' + 数字 { child: 子元素, child0: 子元素, child1: 子元素, ... }; 文本节点的属性名为 'text' 或 'text' + 数字 { text: '内容', text0: '内容', text1: '内容', ... }; |
- Source:
Returns:
- 返回元素
- Type
- Object
Example
import { createElement } from 'digi'
let el = createElement()
console.log(el.outerHTML)
// => '<div></div>'
el = createElement('a')
console.log(el.outerHTML)
// => '<a></a>'
el = createElement({ tagName: 'a' })
console.log(el.outerHTML)
// => '<a></a>'
// 子元素1
el = createElement({ child: 'a' })
console.log(el.outerHTML)
// => '<div><a></a></div>'
// 子元素2
el = createElement({ child: { tagName: 'a' } })
console.log(el.outerHTML)
// => '<div><a></a></div>'
// 子元素3
el = createElement({ child: [{ tagName: 'a' }, 'p'] })
console.log(el.outerHTML)
// => '<div><a></a><p></p></div>'
// 文本节点
el = createElement({ text: '123', text2: 'aa' })
console.log(el.outerHTML)
// => '<div>123aa</div>'
createTextNode(text) → {Object}
创建文本节点
Parameters:
Name | Type | Description |
---|---|---|
text |
String | 节点的文本 |
- Source:
Returns:
- 返回文本节点
- Type
- Object
Example
import { createTextNode, createData } from 'digi'
const data = createData({ a: 123 })
const textNode = createTextNode(data.$tp('a'))
// 没有添加到页面的元素不更新
console.log(textNode.nodeValue)
// => {{1.a}}
// 添加到页面,自动更新
document.body.appendChild(textNode)
console.log(textNode.nodeValue)
// => 123
// 可自动更新
data.a = 321
console.log(textNode.nodeValue)
// => 321
digi(data, element)
把data转成元素添加为element的子元素
Parameters:
Name | Type | Description |
---|---|---|
data |
Array | Object | String | data = tagName || { ...element } || [..., tagName, ..., { ...element }, ...]; 扩展元素属性:{ child: 子元素, text: 文本节点 }, child = [data1, ..., dataN] 或 data 子元素的属性名为 'child' 或 'child' + 数字 { child: 子元素, child0: 子元素, child1: 子元素, ... }; 文本节点的属性名为 'text' 或 'text' + 数字 { text: '内容', text0: '内容', text1: '内容', ... } 参数详情查看createElement |
element |
Object | Undefined | 元素,默认为#digi元素或document.body,把data转成元素添加为其子元素 |
- Source:
Example
import digi, { createData } from 'digi'
// 创建监听数据
const data = createData({ a: 123 })
// 添加元素
digi({ text: data.$tp('a') })
console.log(document.body.lastChild.outerHTML)
// => <div>123</div>
data.a = 321
// => watch a => newVal: 321, oldVal: 123
console.log(document.body.lastChild.outerHTML)
// => <div>321</div>
forEach(data, callBack)
遍历对象或数组,每遍历一个值调用callBack(value, key|index),callBack 返回 false 可提前结束遍历。
Parameters:
Name | Type | Description |
---|---|---|
data |
Array | Object | 要遍历的对象或数组 |
callBack |
function | 每遍历一个值调用的函数 |
- Source:
Example
import { forEach } from 'digi'
var obj = { a: 1, b: 2 }
forEach(obj, (value, key) => console.log(value, key))
// => a, 1
// => b, 2
forEach(obj, (value, key) => {
console.log(value, key)
return false // 提前结束遍历
})
// => a, 1
isArray(value) → {Boolean}
检查值是否为数组类型
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要检查的值 |
- Source:
Returns:
- 是数组返回true, 否则返回false
- Type
- Boolean
Example
import { isArray } from 'digi'
isArray([])
// => true
isEmpty(value)
检查数组或对象是否为空
Parameters:
Name | Type | Description |
---|---|---|
value |
any | 要检查的值 |
- Source:
Example
import { isEmpty } from 'digi'
console.log(isEmpty({}))
// => true
console.log(isEmpty([]))
// => true
console.log(isEmpty('123'))
// => true
isFunction(value) → {Boolean}
检查值是否为函数类型
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要检查的值 |
- Source:
Returns:
- 是函数返回true, 否则返回false
- Type
- Boolean
Example
import { isFunction } from 'digi'
isFunction(isFunction)
// => true
isNull(value) → {Boolean}
检查值是否为null
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要检查的值 |
- Source:
Returns:
- 是null返回true, 否则返回false
- Type
- Boolean
Example
import { isNull } from 'digi'
isNull(null)
// => true
isNull('null')
// => false
isNumber(value) → {Boolean}
检查值是否为数字类型
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要检查的值 |
- Source:
Returns:
- 是数字返回true, 否则返回false
- Type
- Boolean
Example
import { isNumber } from 'digi'
isNumber(1)
// => true
isNumber(NaN)
// => true
isNumber('1')
// => false
isObject(value) → {Boolean}
检查值是否为对象类型
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要检查的值 |
- Source:
Returns:
- 是对象返回true, 否则返回false
- Type
- Boolean
Example
import { isObject } from 'digi'
isObject({})
// => true
isObject([])
// => false
isString(value) → {Boolean}
检查值是否为字符串类型
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要检查的值 |
- Source:
- Tutorials:
-
- Tutorial: isString
Returns:
- 是字符串返回true, 否则返回false
- Type
- Boolean
Example
import { isString } from 'digi'
isString('1')
// => true
isString(1)
// => false
isTofObject(value) → {Boolean}
typeof值是否为object
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要typeof的值 |
- Source:
Returns:
- 是object返回true, 否则返回false
- Type
- Boolean
Example
import { isTofObject } from 'digi'
isTofObject({})
// => true
isTofObject([])
// => true
isUndefined(value) → {Boolean}
检查值是否为undefined
Parameters:
Name | Type | Description |
---|---|---|
value |
Any | 要检查的值 |
- Source:
Returns:
- 是undefined返回true, 否则返回false
- Type
- Boolean
Example
import { isUndefined } from 'digi'
isUndefined(undefined)
// => true
isUndefined('undefined')
// => false
pathJoin(paths) → {String}
接连路径
Parameters:
Name | Type | Description |
---|---|---|
paths |
Array | 多个路径 |
- Source:
Returns:
- 返回连接成的新路径; 数组和对象的路径都用“.”分隔: 1、paths.join('.'),2、中括号替换为点,3、多点替换为一个点,4、去掉前后点
- Type
- String
Example
import { pathJoin } from 'digi'
console.log(pathJoin(a, '[1].b'))
// => a.1.b
pathSplit(paths) → {Array}
将路径转成数组
Parameters:
Name | Type | Description |
---|---|---|
paths |
String | 字符串路径 |
- Source:
Returns:
- 数组路径
- Type
- Array
Example
import { pathSplit } from 'digi'
console.log(pathSplit('a[1]'))
// => ['a', '1']
pick(object, paths) → {Object}
选择对象中的一些属性组成新的对象
Parameters:
Name | Type | Description |
---|---|---|
object |
Object | 源对象 |
paths |
String | Array | 要选择的属性路径 |
- Source:
Returns:
- 返回新的对象
- Type
- Object
Example
import { pick } from 'digi'
var obj = { a: 1, b: 2, c: 3 }
pick(obj, 'a')
// => { a: 1}
pick(obj, ['a', 'b'])
// => { a: 1, b: 3 }
plugins(plugins)
添加插件
Parameters:
Name | Type | Description |
---|---|---|
plugins |
Array | 值 = [plugin1, ..., pluginN]; plugin = { property: '元素属性名', handler: (元素, 元素属性值) => {} }; 或 plugin = [{ property: '元素属性名', handler: (元素, 元素属性值) => {} }, options]; options = {...} handler在创建元素时抓捕到对应属性被触发, 并plugin.options = Object.assign(plugin.options, options) |
- Source:
Example
import digi, { plugins } from 'digi'
import refs, { allotId } from 'digi-refs'
console.log(refs)
// {property: "ref", handler: ƒ, allotId: ƒ}
// 添加插件: plugins([refs]) 或 digi.plugins([refs])
plugins([refs])
// 分配标记id
const textRefId = allotId()
// 添加元素
digi({ ref: textRefId, text: 'hello world' })
console.log(refs[textRefId].outerHTML)
// => <div>hello world</div>
set(data, paths, value)
设置对象或数组属性值
Parameters:
Name | Type | Description |
---|---|---|
data |
Object | Array | 将要被改变属性的数据源 |
paths |
String | Array | 属性路径 |
value |
Any | 属性值 |
- Source:
Example
import { set } from 'digi'
const obj = {}
set(obj, 'a.b.c', 123)
console.log(obj)
// => { a: { b: { c: 123 } } }
set(obj, ['a', 'b', 'c'], 321)
console.log(obj)
// => { a: { b: { c: 321 } } }