2017-01-24 2 views
2

Когда я вводим любое число, большее 1 во входной элемент, входное значение изменяется на 1 (из-за проверки). По какой-то причине это работает только для первого числа, которое я вводил. Если я, например, войду в 11, значение ввода изменится на 11, но оно должно измениться на 1. По крайней мере, так я помню, как он работал в Angular 1. Любая идея, что происходит?Значение свойства только на входном элементе

import { Component } from '@angular/core'; 
@Component({ 
    template:` 
    <input 
    type="number" 
    (input)="validate($event.target.value)" 
    [value]="duration"> 
    <p>{{duration}}</p>` 
}) 
export class OneComponent{ 
    duration: number; 
    constructor(){ 
    this.duration = 0; 
    } 
    validate(value){ 
    if(value > 1) { 
     this.duration = 1; 
    } 
    else { 
     this.duration = value; 
    } 
    } 
} 

Вот plunker (one.component.ts)

+0

что ваше требование? Я не мог понять вашу первую строчку. – micronyks

+0

@micronyks, я хочу, чтобы число на входном элементе изменилось на 1, если введенное значение больше 1 –

ответ

1

Ваш код обманывая обнаружения изменений. С помощью этого обхода обход обнаружения обнаруживает все изменения и обновляет привязку [value]="duration".

export class OneComponent{ 
    duration: number; 
    constructor(private cdRef:ChangeDetectorRef){ 
    this.duration = 0; 
    } 
    validate(value){ 
    this.duration = -1; 
    this.cdRef.detectChanges(); 
    if(value > 1) { 
     this.duration = 1; 
    } 
    else { 
     this.duration = value; 
    } 
    this.cdRef.detectChanges(); 
    } 
} 

Plunker example

+1

yay, это работает! Я люблю тебя, сэр! Спасибо за ваше время и знания! –

+1

Ты знаешь. Возможно, вызов 'detectChanges()' в конце может не понадобиться. После того, как событие «Угловое» в любом случае должно запустить обнаружение изменений. –

Смежные вопросы