然则
9 years ago
6 changed files with 242 additions and 1 deletions
@ -0,0 +1,55 @@ |
|||||
|
# 基本 |
||||
|
|
||||
|
- order: 0 |
||||
|
|
||||
|
最简单的用法。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
````jsx |
||||
|
import { TreeSelect } from 'antd'; |
||||
|
const TreeNode = TreeSelect.TreeNode; |
||||
|
|
||||
|
const Demo = React.createClass({ |
||||
|
getInitialState() { |
||||
|
return { |
||||
|
value: '1', |
||||
|
}; |
||||
|
}, |
||||
|
onChange(e) { |
||||
|
let value; |
||||
|
if (e.target) { |
||||
|
value = e.target.value; |
||||
|
} else { |
||||
|
value = e; |
||||
|
} |
||||
|
this.setState({value}); |
||||
|
}, |
||||
|
render() { |
||||
|
return ( |
||||
|
<div style={{margin: 20}}> |
||||
|
<h2>Single Select</h2> |
||||
|
<TreeSelect style={{width: 300}} showSearch |
||||
|
value={this.state.value} |
||||
|
dropdownMenuStyle={{maxHeight: 200, overflow: 'auto'}} |
||||
|
treeProps={{defaultExpandAll: true}} |
||||
|
onChange={this.onChange}> |
||||
|
<TreeNode value="parent 1" title="parent 1" key="0-1"> |
||||
|
<TreeNode value="parent 1-0" title="parent 1-0" key="0-1-1"> |
||||
|
<TreeNode value="leaf" title="leaf" key="random" /> |
||||
|
<TreeNode value="leaf" title="leaf" /> |
||||
|
</TreeNode> |
||||
|
<TreeNode value="parent 1-1" title="parent 1-1"> |
||||
|
<TreeNode value="sss" title={<span style={{color: 'red'}}>sss</span>} /> |
||||
|
</TreeNode> |
||||
|
</TreeNode> |
||||
|
</TreeSelect> |
||||
|
</div> |
||||
|
); |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
ReactDOM.render( |
||||
|
<Demo /> |
||||
|
, document.getElementById('components-tree-select-demo-basic')); |
||||
|
```` |
@ -0,0 +1,99 @@ |
|||||
|
# 更多功能 |
||||
|
|
||||
|
- order: 1 |
||||
|
|
||||
|
更多功能。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
````jsx |
||||
|
import { TreeSelect } from 'antd'; |
||||
|
const TreeNode = TreeSelect.TreeNode; |
||||
|
|
||||
|
const x = 5; |
||||
|
const y = 3; |
||||
|
const z = 2; |
||||
|
const gData = []; |
||||
|
const generateData = (_level, _preKey, _tns) => { |
||||
|
const preKey = _preKey || '0'; |
||||
|
const tns = _tns || gData; |
||||
|
|
||||
|
const children = []; |
||||
|
for (let i = 0; i < x; i++) { |
||||
|
const key = `${preKey}-${i}`; |
||||
|
tns.push({title: key, key: key}); |
||||
|
if (i < y) { |
||||
|
children.push(key); |
||||
|
} |
||||
|
} |
||||
|
if (_level < 0) { |
||||
|
return tns; |
||||
|
} |
||||
|
const __level = _level - 1; |
||||
|
children.forEach((key, index) => { |
||||
|
tns[index].children = []; |
||||
|
return generateData(__level, key, tns[index].children); |
||||
|
}); |
||||
|
}; |
||||
|
generateData(z); |
||||
|
|
||||
|
const Demo = React.createClass({ |
||||
|
getInitialState() { |
||||
|
return { |
||||
|
value: [], |
||||
|
}; |
||||
|
}, |
||||
|
onDeselect(selectedValue) { |
||||
|
console.log('onDeselect', selectedValue); |
||||
|
const newVal = [...this.state.value]; |
||||
|
newVal.splice(newVal.indexOf(selectedValue), 1); |
||||
|
this.setState({ |
||||
|
value: newVal, |
||||
|
}); |
||||
|
}, |
||||
|
onSelect(selectedKey, node, selectedKeys) { |
||||
|
console.log('selected: ', selectedKey, selectedKeys); |
||||
|
this.setState({ |
||||
|
value: selectedKeys, |
||||
|
}); |
||||
|
}, |
||||
|
onCheck(checkedKey, node, checkedKeys) { |
||||
|
console.log('onCheck:', checkedKey); |
||||
|
this.setState({ |
||||
|
value: checkedKeys, |
||||
|
}); |
||||
|
}, |
||||
|
render() { |
||||
|
const loop = data => { |
||||
|
return data.map((item) => { |
||||
|
if (item.children) { |
||||
|
return <TreeNode key={item.key} value={item.key} title={item.key}>{loop(item.children)}</TreeNode>; |
||||
|
} |
||||
|
return <TreeNode key={item.key} value={item.key} title={item.key} />; |
||||
|
}); |
||||
|
}; |
||||
|
const treeProps = { |
||||
|
showIcon: false, |
||||
|
showLine: true, |
||||
|
checkable: true, |
||||
|
defaultCheckedKeys: this.state.value, |
||||
|
defaultSelectedKeys: this.state.value, |
||||
|
// selectedKeys: this.state.value, |
||||
|
// checkedKeys: this.state.value, |
||||
|
// onCheck: this.onCheck, |
||||
|
}; |
||||
|
return (<div style={{padding: '10px 30px'}}> |
||||
|
<h3>more</h3> |
||||
|
<TreeSelect style={{width: 300}} defaultValue={this.state.value} multiple treeProps={treeProps} |
||||
|
onSelect={this.onSelect} onCheck={this.onCheck} onDeselect={this.onDeselect}> |
||||
|
{loop(gData)} |
||||
|
</TreeSelect> |
||||
|
</div>); |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
ReactDOM.render(<div> |
||||
|
<Demo /> |
||||
|
</div> |
||||
|
, document.getElementById('components-tree-select-demo-enhance')); |
||||
|
```` |
@ -0,0 +1,57 @@ |
|||||
|
import React from 'react'; |
||||
|
import TreeSelect, { TreeNode } from 'rc-tree-select'; |
||||
|
import classNames from 'classnames'; |
||||
|
import assign from 'object-assign'; |
||||
|
import animation from '../common/openAnimation'; |
||||
|
|
||||
|
const AntTreeSelect = React.createClass({ |
||||
|
getDefaultProps() { |
||||
|
return { |
||||
|
prefixCls: 'ant-select', |
||||
|
transitionName: 'slide-up', |
||||
|
optionLabelProp: 'value', |
||||
|
choiceTransitionName: 'zoom', |
||||
|
showSearch: false, |
||||
|
size: 'default' |
||||
|
}; |
||||
|
}, |
||||
|
render() { |
||||
|
const props = this.props; |
||||
|
let { |
||||
|
size, className, combobox, notFoundContent |
||||
|
} = this.props; |
||||
|
|
||||
|
const cls = classNames({ |
||||
|
'ant-select-lg': size === 'large', |
||||
|
'ant-select-sm': size === 'small', |
||||
|
[className]: !!className, |
||||
|
}); |
||||
|
|
||||
|
if (combobox) { |
||||
|
notFoundContent = null; |
||||
|
} |
||||
|
|
||||
|
const treeProps = { |
||||
|
prefixCls: 'ant-tree', |
||||
|
checkable: false, |
||||
|
showIcon: false, |
||||
|
openAnimation: animation |
||||
|
}; |
||||
|
assign(treeProps, props.treeProps); |
||||
|
|
||||
|
let checkable = treeProps.checkable; |
||||
|
if (checkable) { |
||||
|
treeProps.checkable = <span className={`${treeProps.prefixCls}-checkbox-inner`}></span>; |
||||
|
} |
||||
|
|
||||
|
return ( |
||||
|
<TreeSelect {...this.props} |
||||
|
treeProps={treeProps} |
||||
|
className={cls} |
||||
|
notFoundContent={notFoundContent} /> |
||||
|
); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
AntTreeSelect.TreeNode = TreeNode; |
||||
|
export default AntTreeSelect; |
@ -0,0 +1,28 @@ |
|||||
|
# TreeSelect |
||||
|
|
||||
|
- category: Components |
||||
|
- chinese: 树选择控件 |
||||
|
- type: 表单 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 何时使用 |
||||
|
|
||||
|
当需要从树控件中灵活地筛选数据时 |
||||
|
|
||||
|
## API |
||||
|
|
||||
|
### Tree props |
||||
|
|
||||
|
| 参数 | 说明 | 类型 | 默认值 | |
||||
|
|-----------|------------------------------------------|------------|--------| |
||||
|
|multiple | 是否支持多选 | bool | false | |
||||
|
|[select-props](http://ant.design/components/select/#select-props) | the same as select props | || |
||||
|
|treeProps | 和tree props相同(除了onSelect、onCheck) | | [tree-props](http://ant.design/components/tree/#tree-props) | |
||||
|
|
||||
|
### TreeNode props |
||||
|
|
||||
|
| 参数 | 说明 | 类型 | 默认值 | |
||||
|
|-----------|------------------------------------------|------------|--------| |
||||
|
|value | default as optionFilterProp | String | 'value' | |
||||
|
|[treenode-props](http://ant.design/components/tree/#treenode-props) |和 treeNode props 相同||| |
Loading…
Reference in new issue