Angular 2 Невозможно получить доступ к неправильной путанице

Я изучаю Angular 2 и довольно новичок в этом, сегодня я пытаюсь поиграть с EventEmitter в angular 2, позволяя компонентам передавать данные. Что я хочу сделать, так это событие click, вызвать метод службы, который возвращает обещание. Затем я хочу передать результаты обратно родительскому компоненту. У меня есть компонент с событием щелчка на кнопке, который вызывает введенную службу, которая возвращает данные в форме обещания, но внутри «тогда» я пытаюсь передать данные обратно, но мой EventEmitter не определен.

Если я вызываю emit за пределами then, он работает нормально, мне не хватает какой-то привязки к родительской области? или Promise не подходит для использования здесь, и это должна быть подписка? любая помощь будет оценена.

Вот код компонента

import { Component, Output, Input, Injectable, EventEmitter } from '@angular/core';
import { Search } from '../Shared/models/search';
import { SearchResult } from '../Shared/models/searchResult';
import { SearchService } from '../Service/search.service';

@Component({
    selector: 'search',
    template: `<div class="col-sm-12">
                    <div class="input-group">
                        <input [(ngModel)]="search.searchText" class="form-control" placeholder="Search">
                        <span class="input-group-btn">
                        <button type="button" class="btn btn-default" (click)="searchFor()" >Go!</button>
                        </span>
                    </div>
                </div>`
})


@Injectable()
export class SearchComponent {
    constructor(private searchService: SearchService) { }

    @Input() search: Search
    @Output() errorMessage: string;
    @Output() onSearchChange = new EventEmitter<SearchResult[]>();

    searchFor() {
        this.searchService.search(this.search).then(function (results) {
            console.log("Value");
            console.log(results);
            this.onSearchChange.emit(results);
        });
    }
}
}

person Michael    schedule 15.05.2017    source источник
comment
изменить function(results) на results =>   -  person AJT82    schedule 15.05.2017
comment
спасибо @AJT_82 что это значит?   -  person Michael    schedule 15.05.2017
comment
Проверьте ссылку в ответе :) Короче говоря, с синтаксисом толстой стрелки JS использует this из внешней области. Вы можете легко проверить это, используя console.log(this) внутри then для двух опций (function и =>), чтобы увидеть, какую область действия имеет this :)   -  person AJT82    schedule 15.05.2017


Ответы (1)


Чтобы иметь возможность сохранить область this, вам нужно использовать синтаксис толстой стрелки, поэтому измените

this.searchService.search(this.search).then(function (results) {

to:

this.searchService.search(this.search).then(results => {

Дополнительная информация из отличных ответов здесь: Как работает это ключевое слово?

person AJT82    schedule 15.05.2017