My component has a property called options
, which I have defined in the class. However, when I run the code in the browser, it's showing up as undefined. Despite thoroughly checking the code logic, I can't seem to pinpoint any issues. This could be due to a bug or versioning problem.
Below is the component class:
import { Component, OnInit, Input } from '@angular/core';
import { FormControl } from '@angular/forms';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/operator/map';
@Component({
selector: 'app-selector',
templateUrl: './selector.component.html',
styleUrls: ['./selector.component.css']
})
export class SelectorComponent implements OnInit {
myControl = new FormControl();
selectedOption: any;
filteredOptions: Observable<any[]>;
@Input() optionTitle: string;
options: [
{
name: 'something'
},
{
name: 'something else'
}
];;
constructor() {
}
ngOnInit() {
this.filteredOptions = this.myControl.valueChanges
.startWith(null)
.map(item => item && typeof item === 'object' ? item.name : item)
// At this point, the code says that this.options is undefined.
// (However, console.log(this.optionTitle) works perfectly fine)
.map(name => name ? this.filter(name) : this.options.slice());
}
filter(input: string): any[] {
return this.options.filter(option =>
option.name.toLowerCase().indexOf(input.toLowerCase()) === 0);
}
displayFn(option: any): string | any {
return option ? option.name : option;
}
select($event): void {
this.selectedOption = $event.option.value;
}
}
Here is the error message displayed in the browser:
SelectorComponent.html:3 ERROR TypeError: Cannot read property 'slice' of undefined
at MapSubscriber.project (selector.component.ts:35)
at MapSubscriber.webpackJsonp.../../../../rxjs/operator/map.js.MapSubscriber._next (map.js:77)
at MapSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
at MapSubscriber.webpackJsonp.../../../../rxjs/operator/map.js.MapSubscriber._next (map.js:83)
at MapSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
at MergeAllSubscriber.webpackJsonp.../../../../rxjs/OuterSubscriber.js.OuterSubscriber.notifyNext (OuterSubscriber.js:19)
at InnerSubscriber.webpackJsonp.../../../../rxjs/InnerSubscriber.js.InnerSubscriber._next (InnerSubscriber.js:23)
at InnerSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
at Object.subscribeToResult (subscribeToResult.js:17)
at MergeAllSubscriber.webpackJsonp.../../../../rxjs/operator/mergeAll.js.MergeAllSubscriber._next (mergeAll.js:85)
What do you think could be causing this issue?