Невозможно отобразить простую строку в заголовке ввода - PullRequest
1 голос
/ 23 мая 2019

Я работаю с ngbTypeahead над моим приложением Angular, и с массивом объектов он работает нормально.Моя проблема, когда я пытаюсь показать простую строку на вводе Typehead, он не работает.

app.component.ts

import { Component, OnInit, ViewChild, AfterViewInit, ViewChildren, QueryList, ElementRef, Renderer2 } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';
import { Subject, Observable, merge } from 'rxjs';
import { debounceTime, distinctUntilChanged, map, filter, switchMap } from 'rxjs/operators';
import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';

const states = ['Alabama', 'Alaska', 'American Samoa', 'Arizona', 'Arkansas', 'California', 'Colorado',
  'Connecticut', 'Delaware', 'District Of Columbia', 'Federated States Of Micronesia', 'Florida', 'Georgia'];

  const myArray: any = [
    {id: 1, Name: 'John'},
    {id: 2, Name: 'Paul'},
    {id: 3, Name: 'Mark'},
    {id: 4, Name: 'Turi '},
];


@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {  
  selected: any;
  ngOnInit() {    
  }    

  @ViewChild('instance') instance;  
  focus$ = new Subject<string>();
  click$ = new Subject<string>();

  search = (text$: Observable<string>) => {
    const debouncedText$ = text$.pipe(
      debounceTime(200),
      distinctUntilChanged()
    );
    const clicksWithClosedPopup$ = this.click$.pipe(filter(() => !this.instance.isPopupOpen()));
    const inputFocus$ = this.focus$;

    return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
      map(term => (term === '' ? myArray : myArray.filter(v => v.Name.toLowerCase().indexOf(term.toLowerCase()) > -1)).slice(0, 10))
    );    
  };
  formatter = (x: { Name: string }) => x.Name;

  onSubmit1() {    

    this.selected = 'TEST';  // <---- This not work  
  }

  onSubmit2() {
    this.selected = myArray[2];
  }
}

app.component.html

<div style="margin: 20px;">
  <div class="row">
      <div class="col-sm">
          <div class="form-group">      
              <ng-template #rt let-r="result" let-t="term">
                        {{ r.Name }}
              </ng-template>               
              <input                    
                id="typeahead-template"
                type="text"                                
                class="form-control"
                placeholder="Search..."
                [(ngModel)]="selected"
                [ngbTypeahead]="search"
                [resultTemplate]="rt"
                [inputFormatter]="formatter"
                (focus)="focus$.next($event.target.value)"
                (click)="click$.next($event.target.value)"
                #instance="ngbTypeahead"
              />                             
          </div>
      </div>                              
    </div>
    <button type="submit" (click)="onSubmit1()" class="btn btn-primary">String</button>
    <br>
    <br>
    <button type="submit" (click)="onSubmit2()" class="btn btn-primary">Record of Array</button>
</div>

Я понял, что это стекаблитц: https://stackblitz.com/edit/angular-r6spj3

Можете ли вы помочь мне?

Спасибо

1 Ответ

1 голос
/ 23 мая 2019

Рабочий стек стека

Это потому, что вы присваиваете string вместо myArray объекта элемента.

Изменение функции onSubmit(), как показано ниже:

 onSubmit1() {    
   this.selected = {Name:'TEST'};   
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...