2016-10-19 2 views
0

У меня есть форма с кнопкой «заполнить форму», которая задает его свойства модели. Смена модели, похоже, работает нормально, но когда я нажимаю кнопку, элементы управления, реализующие ControlValueAccessor, не получают своих значений, пока я не сосредоточусь и не размываю их.программно обновлять значение для элемента управления, которое реализует ControlValueAccessor

Если элемент управления представляет собой простой вход html, изменения модели сразу видны. Если я установил один из моих пользовательских элементов управления, они не будут отражать их изменения, пока я не нажму на них ...

любые подсказки?

Я использую угловой 2 финала.

этот код показывают значения, то есть сразу после формы, создавая ngOnInit() {

super.ngOnInit(); 
    this.form = this.formBuilder.group({ 
     myfield: ['', ] 
    }) 

    this.myfield= this.form.controls['myfield']; 

    ... 

    this.obs.push(this.route.params.subscribe(params => { 
     if (params['myparam']) { 
      this.model.myfield= params['tper_Codigo']; 
      this.dataservice.get("miEntity", this.model).subscribe(somedata => { 
       this.model = somedata;     
      }); 
     } 
    })); 

этот код не

someClick() { 
    //trying all sort of methods 
    this.model = { myfield : 'aaaa'}; 
    this.form.patchValue({ myfield : 'bbbbb' }); 
    (<FormControl>this.form.controls['myfield']).updateValueAndValidity(); 
    (<FormControl>this.form.controls['myfield']).patchValue('cccc'); 

} 

, как я уже говорил ... если я щелчок и размытие элемента, все вышеописанные методы DO отражают значение, поэтому значение установлено, просто не показано до размытия

+0

У вас есть код, который вы можете поделиться? –

+0

ОК, наконец, я решил принять погружение DEEP в angular2/material на github. Я закончил реорганизацию реализации пользовательского контроля в очень «гейм», близком к их ... теперь он работает. Думаю, я никогда не узнаю, какая часть мин не работает – user5328504

ответ

0

вы можете использовать функцию setValue() для обновления cont значение. Вы можете проверить: api doc

+0

Я сделал это так, а также попробовал много других. Интересная часть заключается в том, что она работает сразу после инициализации формы. После этого изменить значение модели и/или значение патча не влияет. Я также попытался вручную запустить цикл дайджеста, обновить зону и т. Д. И т. Д. Единственный способ увидеть изменение в элементе управления, которое реализует controlvalueaccessor, - это вручную фокусировать его и размытие ... странно! – user5328504

+0

как вы связываете свои данные в шаблоне? – Mavlarn

+0

Hi Mavlam, как я уже говорил в комментарии, я переписывал свой компонент, беря большую часть CVA из угловых2/источников материала. Мой код был довольно близок к началу, но по какой-то причине мягкие изменения закончили тем, что он работал так, как предполагалось. Я хотел бы вернуться к этой проблеме и выяснить, почему это произошло, но я нахожусь в плотном графике, и я сейчас решаю вопрос в более позднем режиме – user5328504

1

Я закончил тем, что переписал свой элемент управления значением больше, чем тот, который находится в угловом2/материале, от угловой команды. https://github.com/angular/material2/blob/master/src/lib/input/input.ts

Я настоятельно рекомендую использовать эти компоненты в качестве конечной ссылки в здании управления (я могу сказать, что контроль дифференцирует gtom «вид» «компонента» и относится к монолитному управлению базой ui). Никаких других примеров не хватает. Я также рекомендую посмотреть на некоторые другие проекты, которые также сделали взять эти элементы управления, как «вдохновение», такие как http://code.promactinfo.com/md2/

Очень полезно и материал, который просто работает

спасибо всем!

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