当前一个值与当前值相同时,如何为@Input值运行更改检测(更新模板)?

时间:2016-08-10 13:03:08

标签: angular ngrx

当前一个值与当前值相同时,如何为@Input值运行更改检测(更新模板)?

DEMO:https://plnkr.co/edit/Rvz2ElLjM20R3nC6ZQWt?p=preview

我正在使用ngrx

用例: 如果输入值为空,我想为blur事件后的输入设置默认值。

输入:

        <input 
            id="format" 
            class="form-control" 
            type="text" 
            [value]="inputValue" 
            (keyup)="keyup$.next($event.target.value)"
            (blur)="blur$.next($event.target.value)"
        >

[value]="inputValue" - @Input哑元素的值,取自store -> format。 我以这种方式从store获取值:

//main component

//template
template: `<format-input [inputValue]="format$ | async" (outputValue)="updateFormat($event)"></format-input>`

this.format$ = this.store.let(getFormat());

//form-reduser.ts
export function getFormat () {
    return (state$: Observable<GeneratorFormState>) => state$
        .map(s => s.format);
}

keyupblur都会执行操作updateFormat

如果blur中插入的值与之前的[value]="inputValue"值相同,我的问题是store事件store无法更新。

例如:

1)商店价值:22 =&gt;输入值:22 =&gt;清除(剪切)输入值=&gt; blur event =&gt;输入为空,将默认值(1)设置为store =&gt;商店价值:1 =&gt;输入值:1

2)商店价值:1 =&gt;输入值:1 =&gt;清除(剪切)输入值=&gt; blur event =&gt;输入为空,将默认值(1)设置为store =&gt;商店价值:1 =&gt;输入值:&#39;&#39; (空)

那么,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题,但这可能是你正在寻找的

导入ChangeDetectorRef并在将值设置为旧值之前调用cdRef.detectChanges()