diff --git a/packages/button/demo/index.vue b/packages/button/demo/index.vue index 49087f144..47cba8f93 100644 --- a/packages/button/demo/index.vue +++ b/packages/button/demo/index.vue @@ -77,6 +77,18 @@ /> + + + + + .demo-button { .van-button { - user-select: none; - &--large { margin-bottom: 15px; } diff --git a/packages/button/en-US.md b/packages/button/en-US.md index accead7d2..6555860fb 100644 --- a/packages/button/en-US.md +++ b/packages/button/en-US.md @@ -60,6 +60,13 @@ Vue.use(Button); Round ``` +### Icon + +```html + +Button +``` + ### Size ```html @@ -78,6 +85,7 @@ Vue.use(Button); | type | Can be set to `primary` `info` `warning` `danger` | `String` | `default` | | size | Can be set to `large` `small` `mini` | `String` | `normal` | | text | Text | `String` | - | +| icon | Left Icon | `String` | - | | tag | HTML Tag | `String` | `button` | | native-type | Native Type Attribute | `String` | `''` | | plain | Whether to be plain button | `Boolean` | `false` | diff --git a/packages/button/index.less b/packages/button/index.less index d1a9ead1e..ac858bcc3 100644 --- a/packages/button/index.less +++ b/packages/button/index.less @@ -108,10 +108,9 @@ line-height: @button-small-line-height; } - &--loading { - .van-loading { - display: inline-block; - } + &__loading { + display: inline-block; + vertical-align: top; } &--mini { @@ -143,10 +142,18 @@ border-radius: 0; } - &__loading-text { + &__icon { + min-width: 1em; + font-size: 1.2em; + line-height: inherit; + vertical-align: top; + } + + &__icon + &__text, + &__loading + &__text { display: inline-block; margin-left: 5px; - vertical-align: middle; + vertical-align: top; } &--hairline { diff --git a/packages/button/index.tsx b/packages/button/index.tsx index 0e973d2ce..fdf273557 100644 --- a/packages/button/index.tsx +++ b/packages/button/index.tsx @@ -1,6 +1,7 @@ import { use } from '../utils'; import { emit, inherit } from '../utils/functional'; import { routeProps, RouteProps, functionalRoute } from '../utils/router'; +import Icon from '../icon'; import Loading, { LoadingType } from '../loading'; // Types @@ -16,6 +17,7 @@ export type ButtonProps = RouteProps & { type: ButtonType; size: ButtonSize; text?: string; + icon?: string; block?: boolean; plain?: boolean; round?: boolean; @@ -41,7 +43,7 @@ function Button( slots: DefaultSlots, ctx: RenderContext ) { - const { tag, type, disabled, loading, hairline, loadingText } = props; + const { tag, icon, type, disabled, loading, hairline, loadingText } = props; function onClick(event: Event) { if (!loading && !disabled) { @@ -59,7 +61,6 @@ function Button( type, props.size, { - loading, disabled, hairline, block: props.block, @@ -71,6 +72,36 @@ function Button( { 'van-hairline--surround': hairline } ]; + function Content() { + const content = []; + + if (loading) { + content.push( + + ); + } else if (icon) { + content.push(); + } + + let text; + if (loading) { + text = loadingText; + } else { + text = slots.default ? slots.default() : props.text; + } + + if (text) { + content.push({text}); + } + + return content; + } + return ( - {loading ? ( - [ - , - loadingText && {loadingText} - ] - ) : ( - {slots.default ? slots.default() : props.text} - )} + {Content()} ); } @@ -99,6 +119,7 @@ function Button( Button.props = { ...routeProps, text: String, + icon: String, block: Boolean, plain: Boolean, round: Boolean, diff --git a/packages/button/test/__snapshots__/demo.spec.js.snap b/packages/button/test/__snapshots__/demo.spec.js.snap index d66b644ce..982e98aa0 100644 --- a/packages/button/test/__snapshots__/demo.spec.js.snap +++ b/packages/button/test/__snapshots__/demo.spec.js.snap @@ -8,12 +8,15 @@ exports[`renders demo correctly 1`] = `
-
+
`; diff --git a/packages/button/zh-CN.md b/packages/button/zh-CN.md index b27aa0293..6473e9fb2 100644 --- a/packages/button/zh-CN.md +++ b/packages/button/zh-CN.md @@ -68,6 +68,13 @@ Vue.use(Button); 圆形按钮 ``` +### 图标按钮 + +```html + +按钮 +``` + ### 按钮尺寸 支持`large`、`normal`、`small`、`mini`四种尺寸,默认为`normal` @@ -87,9 +94,10 @@ Vue.use(Button); |------|------|------|------|------| | type | 类型,可选值为 `primary` `info` `warning` `danger` | `String` | `default` | 1.6.6 | | size | 尺寸,可选值为 `large` `small` `mini` | `String` | `normal` | - | -| text | 文字 | `String` | - | - | +| text | 按钮文字 | `String` | - | - | +| icon | 左侧图标名称或图片链接,可选值见 Icon 组件 | `String` | - | 2.0.0 | | tag | HTML 标签 | `String` | `button` | - | -| native-type | 原生 type 属性 | `String` | - | - | +| native-type | 原生 button 标签 type 属性 | `String` | - | - | | block | 是否为块级元素 | `Boolean` | `false` | - | | plain | 是否为朴素按钮 | `Boolean` | `false` | 1.1.13 | | square | 是否为方形按钮 | `Boolean` | `false` | 1.2.0 | diff --git a/packages/submit-bar/test/__snapshots__/demo.spec.js.snap b/packages/submit-bar/test/__snapshots__/demo.spec.js.snap index 6b5fae043..0eb31ad66 100644 --- a/packages/submit-bar/test/__snapshots__/demo.spec.js.snap +++ b/packages/submit-bar/test/__snapshots__/demo.spec.js.snap @@ -21,8 +21,8 @@ exports[`renders demo correctly 1`] = `
-
合计:¥ 30.50
diff --git a/packages/submit-bar/test/__snapshots__/index.spec.js.snap b/packages/submit-bar/test/__snapshots__/index.spec.js.snap index 36d1702fc..004dae279 100644 --- a/packages/submit-bar/test/__snapshots__/index.spec.js.snap +++ b/packages/submit-bar/test/__snapshots__/index.spec.js.snap @@ -3,7 +3,7 @@ exports[`decimal-length prop 1`] = `
-
合计:¥ 1.1
+
合计:¥ 1.1
`; @@ -11,7 +11,7 @@ exports[`decimal-length prop 1`] = ` exports[`disable submit 1`] = `
-
合计:¥ 0.01
+
合计:¥ 0.01
`; @@ -19,18 +19,18 @@ exports[`disable submit 1`] = ` exports[`suffix-label prop 1`] = `
-
Label¥ 1.11Suffix Label
+
Label¥ 1.11Suffix Label
`; exports[`top slot 1`] = ` -
top
+
top
`; exports[`without price 1`] = `
-
+
`;