2017-07-26 55 views
0

所以我有以下代碼:角2未定義的變種

@ViewChild('MondayPicker') MondayPicker; 
@ViewChild('TuesdayPicker') TuesdayPicker; 
@ViewChild('WednesdayPicker') WednesdayPicker; 
@ViewChild('ThursdayPicker') ThursdayPicker; 
@ViewChild('FridayPicker') FridayPicker; 
@ViewChild('SaturdayPicker') SaturdayPicker; 
@ViewChild('SundayPicker') SundayPicker; 

working_days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']; 
simpleColumns; 
reservation_times; 
currentUser; 
private ngUnsubscribe: Subject<any> = new Subject<any>() 

ionViewDidEnter(){ 

    for(var i = 0; i < this.working_days.length; i++){ 
     this.firebase.database.list('/schedule',{query: {orderByChild: 'user_day',equalTo: this.currentUser.uid+'_'+this.working_days[i] }}) 
     .take(1) 
     .subscribe(
     (data) => { 
      console.log(eval('this.'+data[0].day+'Picker.setValue("From 00: 00 TO 00: 00");')); 
     }); 
    } 
} 

現在這行:

的console.log(EVAL( '這個' +數據[0]·天+ 'Picker.setValue(「From 00:00 to 00:00」);'));

所以我嘗試做會產生這樣的:this.MondayPicker.setValue("From 00: 00 TO 00: 00");

,但我得到undefinedthis.MondayPicker例如,但如果我做手工this.MondayPicker.setValue("From 00: 00 TO 00: 00");它的工作原理,爲什麼會出現這種情況?

+0

謝謝!!發佈它作爲答案,我可以接受它,我是新手,所以我不知道它會起作用。 – Uffo

+0

我懷疑問題的根源在於,當您運行Eval時,評估的腳本具有不同的範圍,並且在該範圍內,'this'不再是您認爲的範圍。 – Ava

回答

0

我認爲你應該避免使用eval。試試這個:

this[data[0].day + 'Picker'].setValue(...) 
+0

我會在7分鐘內接受它,所以在JS中這基本上是一個包含對象的數組? – Uffo

+0

這取決於您從Firebase發送的內容 – yurzui