import PropTypes from '../_util/vue-types' import { initDefaultProps, getComponentFromProp } from '../_util/props-util' import classNames from 'classnames' export const AnchorLinkProps = { prefixCls: PropTypes.string, href: PropTypes.string, title: PropTypes.any, } export default { name: 'AAnchorLink', props: initDefaultProps(AnchorLinkProps, { prefixCls: 'ant-anchor', href: '#', }), inject: { antAnchor: { default: {}}, antAnchorContext: { default: {}}, }, mounted () { this.antAnchor.registerLink(this.href) }, beforeDestroy () { this.antAnchor.unregisterLink(this.href) }, watch: { href (val, oldVal) { this.antAnchor.unregisterLink(oldVal) this.antAnchor.registerLink(val) }, }, methods: { handleClick (e) { this.antAnchor.scrollTo(this.href) const { scrollTo } = this.antAnchor const { href, title } = this.$props if (this.antAnchorContext.$emit) { this.antAnchorContext.$emit('click', e, { title, href }) } scrollTo(href) }, }, render () { const { prefixCls, href, $slots, } = this const title = getComponentFromProp(this, 'title') const active = this.antAnchor.$data.activeLink === href const wrapperClassName = classNames(`${prefixCls}-link`, { [`${prefixCls}-link-active`]: active, }) const titleClassName = classNames(`${prefixCls}-link-title`, { [`${prefixCls}-link-title-active`]: active, }) return (
{title} {$slots.default}
) }, }