выберите не обновлять в Angular 2

1

привет я новичок в угловой 2

Я могу сделать formGroup в add в ng-select controll и предопределить добавленную стоимость.

это прекрасно. но когда кнопка нажимает, то новое значение нажимает ng-select, но ng-select не обновляется.

здесь мой плункер

https://plnkr.co/edit/Hwfk1T2stkiRcLTxuFmz

//our root app component
import {Component, OnInit, NgModule, ViewChild} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';
import {SelectModule} from 'ng-select';

@Component({
    selector: 'my-app',
    template: '
<h1>ng-select demo app</h1>
<form style="padding:18px;max-width:800px;"
    [formGroup]="form">

    <div style="margin:5px 0;font-weight:600;">Single select example</div>
    <ng-select
          [options]="options0"
          [multiple]="false"
          placeholder="Select one"
      formControlName="selectSingle"
     >
    </ng-select>

   <button (click)="pushValue()">Click</button>



    <div>Events:</div>
    <pre #preSingle>{{logSingleString}}</pre>

</form>'
})
export class App implements OnInit {

    form: FormGroup;

    multiple0: boolean = false;
    options0: any[] = [];
    selection: Array<string>;

    @ViewChild('preSingle') preSingle;

    logSingleString: string = '';

    constructor() {
      this.options0.push({"label":'test',"value":'Test'});
       console.log("Object:::"+JSON.stringify(this.options0));
    }

    ngOnInit() {
        this.form = new FormGroup({});
        this.form.addControl('selectSingle', new FormControl(''));
        console.log("Object:::"+JSON.stringify(this.options0));
    }

    pushValue()
    {
       console.log("pushValue call.");
       this.options0.push({"label":"test","value":"Test"});
       console.log("Object:::"+JSON.stringify(this.options0));
    }
}

@NgModule({
  imports: [
    BrowserModule,
    ReactiveFormsModule,
    SelectModule
  ],
  declarations: [ App ],
  bootstrap: [ App ]
})
export class AppModule {}

где не так???

Теги:
angular
angular-ngselect

2 ответа

1
Лучший ответ

Посмотрев на исходный код ng-select я заметил

ngOnChanges(changes: any) {
  if (changes.hasOwnProperty('options')) {
     this.updateOptionsList(changes['options'].isFirstChange());
  }

поэтому, чтобы обновить список опций, вы должны запустить ngOnChanges. Это можно сделать, создав новую ссылку на options0

this.options0 = this.options0.concat({"label":"test","value":"Test"});

или же

this.options0 = [...this.options0, {"label":"test","value":"Test"}];

Модифицированный Plunker

1

вы можете использовать Array.slice() для обновления экземпляра массива, чтобы угловое обнаружение изменения массива.

this.options0 = this.options0.slice();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню