angular - 从组件订阅服务中的 Observable

标签 angular observable angular2-services angular2-observables

我已经搜索了很长时间来了解如何订阅一个值不断更新的数组。

我需要了解如何正确设置我的 Angular 2+ 服务 observable 并在我的组件中正确订阅它。请假设代码的所有其他部分都能正常工作。

@Injectable()
export class AutocompleteService {

    searchTerm: string;
    results = [];
    observe$ = Observable.from(this.results);

    searchTest(term){
        this.searchTerm = term.toLowerCase();

        if(this.searchTerm.length > 2){
            this.recruiters.forEach(function(el){
                if(el.name.toLowerCase().indexOf(term) != -1) {
                    this.results.push(el);
                }   
            });    

        }
    }

    getCurrentResults():Observable<Object> {
        return this.observe$;
    }

服务中的一切都按预期工作。如果我登录 term我从我的组件获取用户输入。或者 results匹配搜索结果后的数组被推送到它上面。
@Component({
    selector: 'autocomplete',
    templateUrl: './autocomplete.component.html',
    providers: [AutocompleteService]
})
export class AutocompleteComponent implements OnInit{
    constructor(private autocompleteService: AutocompleteService){}

    value: string = '';
    searchControl = new FormControl();

    // fired when input happens
    getResults(event){
        this.autocompleteService.searchTest(event.target.value);

        this.autocompleteService.getCurrentResults().subscribe(
            value => console.log(value)
        );

    }

我已经尽我所能设置了可观察模式,但我没有从 getResults 中的 .subscribe 中得到任何东西

最佳答案

你的代码有很多错误

  • 没有 this.recruiters您的服务领域
  • this.results.push(el);不会因为您使用的是 forEach(function(el){ 而对结果产生任何影响应该是 forEach((el)=>以便您的 this范围内将指代您的服务。

  • 示例 plunker:http://plnkr.co/edit/5L0dE7ZNgpJSK4AbK0oM?p=preview

    关于angular - 从组件订阅服务中的 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43124001/

    相关文章:

    angular - 效果 "AuthEffects.authLogin$"发送无效操作 : undefined

    angular - 如何确保在 2 个或更多 Observable 返回数据之前不会执行函数?

    angular - 如何在 Angular2 中注销时获取新实例/重新加载所有服务

    javascript - NativeScript:类和服务之间的区别?

    angular - 订阅 Observable 与订阅 Subject

    angular - 如何在 Angular 2 中监听点击并按住?

    angular - 如何从有 promise 的函数返回可观察的

    angular - 使用从其自己的组件上的可观察对象检索的数据的方法在用作 Input() 时返回未定义

    javascript - 如何指定我想要包含 Angular 代码覆盖率文件的文件夹?

    javascript - 我的 Angular 应用程序中 BehaviorSubject 的混淆行为