my-lib/input-item/input-item.ts
changeDetection | ChangeDetectionStrategy.OnPush |
encapsulation | ViewEncapsulation.None |
selector | input-item |
styleUrls | input-item.less, |
templateUrl | ./input-item.html |
Properties |
Methods |
Inputs |
Outputs |
Accessors |
constructor(ele: ElementRef, render: Renderer2)
|
||||||||||||
Defined in my-lib/input-item/input-item.ts:72
|
||||||||||||
Parameters :
|
clear
|
Type:
Default value: |
Defined in my-lib/input-item/input-item.ts:51
|
defaultValue
|
Type: |
Defined in my-lib/input-item/input-item.ts:23
|
disabled
|
Type: |
Defined in my-lib/input-item/input-item.ts:29
|
editable
|
Type:
Default value: |
Defined in my-lib/input-item/input-item.ts:25
|
error
|
Type: |
Defined in my-lib/input-item/input-item.ts:54
|
extra
|
Type: |
Defined in my-lib/input-item/input-item.ts:62
|
labelNumber
|
Type:
Default value: |
Defined in my-lib/input-item/input-item.ts:63
|
maxLength
|
Type: |
Defined in my-lib/input-item/input-item.ts:52
|
moneyKeyboardAlign
|
Type: |
Defined in my-lib/input-item/input-item.ts:66
|
name
|
Type: |
Defined in my-lib/input-item/input-item.ts:65
|
placeholder
|
Type: |
Defined in my-lib/input-item/input-item.ts:24
|
readonly
|
Type: |
Defined in my-lib/input-item/input-item.ts:42
|
type
|
Type: |
Defined in my-lib/input-item/input-item.ts:21
|
updatePlaceholder
|
Type:
Default value: |
Defined in my-lib/input-item/input-item.ts:64
|
value
|
Type: |
Defined in my-lib/input-item/input-item.ts:22
|
onBlur
|
$event type: EventEmitter<any>
|
Defined in my-lib/input-item/input-item.ts:69
|
onChange
|
$event type: EventEmitter<any>
|
Defined in my-lib/input-item/input-item.ts:68
|
onErrorClick
|
$event type: EventEmitter<any>
|
Defined in my-lib/input-item/input-item.ts:71
|
onExtraClick
|
$event type: EventEmitter<any>
|
Defined in my-lib/input-item/input-item.ts:72
|
onFocus
|
$event type: EventEmitter<any>
|
Defined in my-lib/input-item/input-item.ts:70
|
_onClear | ||||||||
_onClear(e: Event)
|
||||||||
Defined in my-lib/input-item/input-item.ts:91
|
||||||||
Parameters :
Returns :
void
|
_onError | ||||||||
_onError(e: any)
|
||||||||
Defined in my-lib/input-item/input-item.ts:83
|
||||||||
Parameters :
Returns :
void
|
_onExtra | ||||||||
_onExtra(e: any)
|
||||||||
Defined in my-lib/input-item/input-item.ts:87
|
||||||||
Parameters :
Returns :
void
|
initRipple |
initRipple()
|
Defined in my-lib/input-item/input-item.ts:81
|
Returns :
void
|
ngOnInit |
ngOnInit()
|
Defined in my-lib/input-item/input-item.ts:103
|
Returns :
void
|
setItemActive | ||||||||
setItemActive(isActive?: boolean)
|
||||||||
Defined in my-lib/input-item/input-item.ts:97
|
||||||||
Parameters :
Returns :
void
|
_disabled |
_disabled:
|
Type : boolean
|
Default value : false
|
Defined in my-lib/input-item/input-item.ts:27
|
_readonly |
_readonly:
|
Type : boolean
|
Default value : false
|
Defined in my-lib/input-item/input-item.ts:40
|
input |
input:
|
Type : ElementRef
|
Decorators : ViewChild
|
Defined in my-lib/input-item/input-item.ts:19
|
disabled |
setdisabled(val: any)
|
Defined in my-lib/input-item/input-item.ts:29
|
readonly |
setreadonly(val: any)
|
Defined in my-lib/input-item/input-item.ts:42
|
error |
seterror(val: any)
|
Defined in my-lib/input-item/input-item.ts:54
|
import {
ViewEncapsulation, Component,
Input, HostBinding, OnInit,
InjectionToken, Inject, ChangeDetectionStrategy,
ElementRef, Renderer2, ViewChild,
Output, EventEmitter, TemplateRef
} from '@angular/core';
import { ListItemComponent } from '../list/list-item/list-item';
import { fromEvent, merge } from 'meepo-utils';
@Component({
selector: 'input-item',
templateUrl: './input-item.html',
styleUrls: ['./input-item.less', './patch.less'],
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class InputItemComponent extends ListItemComponent implements OnInit {
@ViewChild('input') input: ElementRef;
@Input() type: string;
@Input() value: string;
@Input() defaultValue: string;
@Input() placeholder: string;
@Input() editable: boolean = true;
_disabled: boolean = false;
@Input()
set disabled(val: any) {
const _disabled = this.isMeepoTrue(val);
if (_disabled) {
this.render.setAttribute(this.input.nativeElement, 'disabled', '');
this.addToClass('am-input-disabled', true, false);
} else {
this.render.removeAttribute(this.input.nativeElement, 'disabled');
this.addToClass('am-input-disabled', false, false);
}
}
_readonly: boolean = false;
@Input()
set readonly(val: any) {
this._readonly = this.isMeepoTrue(val);
if (this._readonly) {
this.render.setAttribute(this.input.nativeElement, 'readonly', '');
} else {
this.render.removeAttribute(this.input.nativeElement, 'readonly');
}
}
@Input() clear: boolean = false;
@Input() maxLength: number;
@Input()
set error(val: any) {
const error = this.isMeepoTrue(val);
if (error) {
this.addToClass('am-input-error', true, false);
} else {
this.addToClass('am-input-error', false, false);
}
}
@Input() extra: string | TemplateRef<any>;
@Input() labelNumber: number = 5;
@Input() updatePlaceholder: boolean = false;
@Input() name: string;
@Input() moneyKeyboardAlign: 'left' | 'right';
@Output() onChange: EventEmitter<any> = new EventEmitter();
@Output() onBlur: EventEmitter<any> = new EventEmitter();
@Output() onFocus: EventEmitter<any> = new EventEmitter();
@Output() onErrorClick: EventEmitter<any> = new EventEmitter();
@Output() onExtraClick: EventEmitter<any> = new EventEmitter();
constructor(
ele: ElementRef, render: Renderer2
) {
super(ele, render);
this.addToClass('am-input-item', true, false);
this.addToClass('am-input-arrow', true, false);
}
initRipple() { }
_onError(e: any) {
this.onErrorClick.emit(e);
}
_onExtra(e: any) {
this.onExtraClick.emit(e);
}
_onClear(e: Event) {
e.stopPropagation();
e.preventDefault();
this.input.nativeElement.value = '';
}
setItemActive(isActive?: boolean) {
setTimeout(() => {
this.input.nativeElement.focus();
});
}
ngOnInit() {
this.arrow = 'empty';
const change = merge(
// fromEvent(this.input.nativeElement, 'change'),
// fromEvent(this.input.nativeElement, 'keyup'),
// fromEvent(this.input.nativeElement, 'keydown'),
fromEvent(this.input.nativeElement, 'input'),
fromEvent(this.input.nativeElement, 'propertychange')
);
const blur = fromEvent(this.input.nativeElement, 'blur');
const focus = fromEvent(this.input.nativeElement, 'focus');
change
.distinctUntilChanged()
.debounceTime(300)
.subscribe(res => {
this.onChange.emit(res);
});
blur.subscribe(res => {
setTimeout(() => {
if (!this._readonly) {
this.addToClass('am-input-focus', false, false);
this.onBlur.emit(res);
}
});
});
focus.subscribe(res => {
setTimeout(() => {
if (!this._readonly) {
this.addToClass('am-input-focus', true, false)
this.onFocus.emit(res);
}
});
});
}
}
<div class="{{_name}}-thumb" *ngIf="_thumb && !thumbRef">
<img [src]="_thumb" />
</div>
<ng-container *ngIf="thumbRef">
<div class="{{_name}}-thumb">
<ng-container *ngTemplateOutlet="thumbRef"></ng-container>
</div>
</ng-container>
<div class="am-list-line" [class.am-list-line-multiple]="_multiple">
<div class="am-input-label am-input-label-{{labelNumber}}">
<ng-content></ng-content>
</div>
<div class="am-input-control">
<input #input [attr.name]="name" [attr.placeholder]="placeholder" [attr.value]="value" [attr.type]="type">
</div>
<div class="am-input-extra" (click)="_onExtra($event)" *ngIf="extra && extraType === 'string'">
{{extra}}
</div>
<div class="am-input-extra" (click)="_onExtra($event)" *ngIf="extra && extraType !== 'string'">
<ng-container *ngTemplateOutlet="extra"></ng-container>
</div>
<div class="am-input-clear" (click)="_onClear($event)"></div>
<div class="am-input-error-extra" (click)="_onError($event)"></div>
</div>
<div listRipple style="display: none;"></div>