JS: ОШИБКА TypeError: Невозможно прочитать свойство 'push' из неопределенного - PullRequest
0 голосов
/ 10 июля 2019

У меня вопрос по поводу моего кода.

Я хочу использовать это автозаполнение в своем проекте для страны Плагин

Я получаю всю страну в формате JSON, как показано ниже:

JS: country [{
JS:   "name": "Afghanistan",
JS:   "short_name": "AF",
JS:   "country_id": 1
JS: }, {
JS:   "name": "Albania",
JS:   "short_name": "AL",
JS:   "country_id": 2
JS: }, {
JS:   "name": "Algeria",
JS:   "short_name": "DZ",
JS:   "country_id": 3
JS: }, {
JS:   "name": "American Samoa",
JS:   "short_name": "AS",
JS:   "country_id": 4
JS: }, {
JS:   "name": "Andorra",
JS:   "short_name": "AD",
JS:   "country_id": 5
JS: },{
JS:   "...}]

В сервисе я вызываю функцию как в этом коде:

 public getAllCountryws(): Observable<Country[]> {
        return this.http.get(Api.getUrl(Api.URLS.countryGetAll), {
        })
            .pipe(map((response: Response) => {
                let res = response.json();
                if (res.StatusCode === 1) {
                    this.auth.logout();
                } else if (res.StatusCode === 4) {
                    return false;
                } else if (res.StatusDescription === 'No result') {
                    return false;
                } else if (res.StatusDescription === '[]') {
                    return false;
                } else if (res.StatusDescription === []) {
                    return false;
                } else {
                    return res.StatusDescription.map(country => {
                        return new Country(country);
                    });
                }
            },
                (error) => {
                    console.log(error);
                }))
    }

А в component.ts я вызываю сервисную функцию, как в этом коде:

public country: Country[] = [];
  private _items: ObservableArray<TokenModel>;
   @ViewChild("autocomplete") autocomplete: RadAutoCompleteTextViewComponent;

   ngOnInit(): void {
        this.getallcountry();
    }
    getallcountry() {
        this.ws.getAllCountryws().subscribe(
            country => {
                this.country = country;
                const mycountry = country;
                console.log('mycountry', mycountry) // show correct JSON
                 for (let i = 0; i < mycountry.length; i++) {
                console.log(mycountry.length) // show correct
                     this._items.push(new TokenModel(mycountry[i].company_id, null));
                }
            },
            err => console.error('err', err),
            () => console.log('error')
        );
    }

ОШИБКА:

ошибка

Также в html у меня есть этот код:

            <Label text="Select Country*" row="0" col='0'></Label>
            <RadAutoCompleteTextView #autocomplete [items]="_items" suggestMode="Suggest" displayMode="Tokens"
                row="1" col='0' hint="Country">
                <SuggestionView tkAutoCompleteSuggestionView>
                    <ng-template tkSuggestionItemTemplate let-item="item">
                        <StackLayout orientation="vertical" padding="10">
                            <Label [text]="item.name"></Label>
                        </StackLayout>
                    </ng-template>
                </SuggestionView>
            </RadAutoCompleteTextView>

На вид ничего не показывает. Результатов не найдено.

Обновление: От: private _items: ObservableArray<TokenModel>;

Кому: public _items: TokenModel[] = [];

Добавить:

   get dataItems():  TokenModel[] {
        console.log('this._items', this._items)
        return this._items;
    }

Ошибка с результатом

В html-изменении:

от: <RadAutoCompleteTextView #autocomplete [items]="_items" suggestMode="Suggest" displayMode="Tokens"

до:

 <RadAutoCompleteTextView #autocomplete [items]="dataItems" suggestMode="Suggest" displayMode="Tokens"

В поле зрения не отображаются результаты.

1 Ответ

1 голос
/ 10 июля 2019

В вашем файле component.ts измените объявление _items

От:

private _items: ObservableArray<TokenModel>;

Кому:

private _items: TokenModel[] = [];
...