import {Component, ElementRef, EventEmitter, Input, OnInit, Output} from '@angular/core'; import * as _ from 'lodash'; @Component({ selector: 'dc-search', template: ` `, styles: [` .search { width: 310px; height: 30px; line-height: 30px; padding: 0 10px; background-color: #fff; position: relative; } .search:hover { } .clear-input-value { position: absolute; right: 50px; top: 0; cursor: pointer; width: 12px; height: 30px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAOVJREFUKJF90DFKA1EQBuAvj2Cu8MBqe8FokedeQb2A6WzU0uN4gxTbxkM8CKKSfqvAXsAi2lj4dlkh5Icp5p9/Zv6ZSdM0Ck7whDucFW6LFV7wDdNSOMUac/9xVeIet9iFMvmQeIw5XjELeOzFdV2LMQ6qGKO6rvv0HA8By55p21ZKSYxRjFFKSdu2403LKS77rOs6OWcpJZBz1nXduOEiHPF9CD8Bb2PPKSU552HT+CZsg78/g6qqBhu9vaqqxg2rSdM0M+TyhWP4xCJgjxu8HxF/4Br7/ugdEp6xwVeJTeEWReMX1Y9FK/4RDOgAAAAASUVORK5CYII=) no-repeat center center transparent; } .clear-input-value:hover { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAOtJREFUKJF90b1NAzEcBfBfriCVm2vR3S2ABFXYAViADACUjMMGWQCGQIoQWJngrLTXWBSBIhRxooBCnuTCz++9/4dHMUYFJ3jALc4Kt8AMT/iCUTGc4hkXDuMdN1hWJfmYWHl7wbjC/VbcdZ0Qwk4VQtB13fZ6jrsK0y0zDIO2bYUQhBA0TWMYhv1K01GMcVXa2qW2bWu9XkspyTnvG1bVkb4P4bvC29/0vu+llDRN82smLCqbPYO6rvV9L+cs5yylpK7rfcNsFGMc47Vs4RgiJhVWuLb5nP/wgSt7Qy9xiUfM8VnOvHCTovEDCGVJpA/ldQoAAAAASUVORK5CYII=) no-repeat center center transparent; } .search > input { width: 100%; height: 30px; transition: none; background: none; color: #333; font-size: 12px; border-radius: 4px; border: 1px solid #ccc; padding-right: 60px; } .search > input::placeholder { color: #bbb; font-size: 12px; } .search > input.dc-valid { transition: none; background: none; border-color: #3FB992; } .search > input:focus { transition: none; background: none; border-color: #2BB1FF; } .search > span { cursor: pointer; display: block; width: 30px; height: 22px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABlUlEQVQ4jaXUz4tNUQAH8M+V5i8Q8iNDipXStUB5xUiz8GNhQRZEShoLYme68Sg1i5kaQ35EWVlNirGQLOyIV0rys2bMYy1ZmRrX4t5bZ27vvd7c+a5O597z6XRO5xu5/FaL7MNJbMeSfO4bnmEUX4of0ySes3BRCVqLSTzGVrzAAC6hmY8/42arXcDiYLwbz/Eem/GuzZoTuIdd2Fj+WOxwVY49waYOGNzHOmzAy3bgG0xhfwcozCR6UYvqjXNlsB/LsbNLrMh3PMJwGTyPX/kO55vjENUbe0OwhokKGPzGDA6FYA9eVQThB1aEICxdANiD2RD8iT0LAFfiUwg+xbaK2BZEuB2CV/Px0QrgBKbTJP4Qgk3cwQOsmQd2BstwIJwsLuWU7LamsL4L7CyuYzxN4jnPNGybXrzGV9yVve9yarLqGsFDHGz19IrMyirrouw8m/gj68Fp/JOVwQx24AguYDiqNwYLJGpTsHAYfViNv/iIcVmRhBnEFZxOk/hWJ7CrpEksqjcGMIahcmNXRW/gGo79B+9PXu4lS/dFAAAAAElFTkSuQmCC) no-repeat center center transparent; position: absolute; right: 15px; top: 5px; } `] }) export class SearchComponent implements OnInit { keyword: string; @Input() placeholder: string; @Input() width: string; @Input() realTime: boolean; // 是否实时监听变化 @Output() search = new EventEmitter(); constructor() { } ngOnInit() { } modelChange() { if (this.realTime) { this.sendSearchResult(); } } sendSearchResult() { this.search.emit(_.trim(this.keyword)); } setSearchText(text?: string) { this.keyword = text || ''; } clearValue(dom: any) { this.setSearchText(); this.sendSearchResult(); dom.focus(); } }