2017-07-29 12 views
0

評価のためにデータベースに新しいオブジェクトを作成しようとしていますが、現在はハードコードされているだけで動作させるが、ビューからは動的になります。私は現在、エラーを取得することができます私は評価オブジェクトが正しく戻されていないと信じてリードnullのプロパティ 'プッシュ'を読み取ることはできません?それとも、それを受け取るのを待っているオブジェクトを持っていないfirebaseと関係がありますか?Angularfireはヌルのプロパティ 'push'を読み取れません

私は、他の場所で使用していたコードを文字通り重複していますが、これは私が間違っていることを分かりません。

モデル

export class AssessmentItem { 
    $key: string; 
    first: string; 
    second: string; 
    third: string; 
    education: number; 
    employment: number; 
    health: number; 
    social: number; 
    civic: number; 
    housing: number; 
} 

サービス

assessmentItems: FirebaseListObservable<AssessmentItem[]> = null; 
    assessmentItem: FirebaseObjectObservable<AssessmentItem> = null; 

    constructor(private db: AngularFireDatabase, 
       private afAuth: AngularFireAuth) { 
    // setting userId returned from auth state to the userId on the service, now we can query 
    // currently logged in user, using the id. IMPORTANT 
    this.afAuth.authState.subscribe(user => { 
     if(user) this.userId = user.uid 
    }) 
    } 

createAssessmentItem(assessmentItem: AssessmentItem) { 
    this.assessmentItems.push(assessmentItem) 
     .catch(error => this.handleError(error)) 
    } 

TS

assessments: FirebaseListObservable<AssessmentItem[]>; 

    assessment: AssessmentItem = new AssessmentItem; 

    constructor(private visionService: VisionService, 
       public auth: AuthService) { } 

    ngOnInit() { 
    //this.assessments = this.visionService.getAssessment(); 
    } 
test() { 
    this.assessment.first = "test"; 
    this.assessment.second = "test"; 
    this.assessment.third = "test"; 
    this.assessment.education = 1; 
    this.assessment.civic = 1; 
    this.assessment.employment = 1; 
    this.assessment.health = 1; 
    this.assessment.housing = 1; 
    this.assessment.social = 1; 
    this.visionService.createAssessmentItem(this.assessment) 
    console.log(this.assessment); 
    } 

それがどのように使用するかビューを提出

<md-card-content> 
    <p>List 3 things that they did that you think helped them become successful:</p> 
    <md-input-container> 
     <textarea mdInput 
       placeholder="First" 
       [(ngModel)]="assessment.first" 
       (ngModelChange)="assessment.first"></textarea> 
    </md-input-container> 
    <md-input-container> 
     <textarea mdInput 
       placeholder="Second" 
       [value]="assessment.second" 
       [ngModel]="assessment.second" 
       (ngModelChange)="assessment.second"></textarea> 
    </md-input-container> 
    <md-input-container> 
     <textarea mdInput 
       placeholder="Third" 
       [value]="assessment.third" 
       [ngModel]="assessment.third" 
       (ngModelChange)="assessment.third">></textarea> 
    </md-input-container> 
    </md-card-content> 
</md-card> 


<md-card class="result"> 
    <md-card-content> 
    <p>Education</p> 
    <md-slider 
     [min]="min" 
     [max]="max" 
     [step]="step" 
     [thumb-label]="thumbLabel" 
     [tick-interval]="tickInterval" 
     [value]="0" 
     [ngModel]="assessment.education" 
     (ngModelChange)="assessment.education"> 
    </md-slider> 
    <p>Employment</p> 
    <md-slider 
     [min]="min" 
     [max]="max" 
     [step]="step" 
     [thumb-label]="thumbLabel" 
     [tick-interval]="tickInterval" 
     [value]="0" 
     [ngModel]="assessment.employment" 
     (ngModelChange)="assessment.employment"> 
    </md-slider> 
    <p>Health and Wellbeing</p> 
    <md-slider 
     [min]="min" 
     [max]="max" 
     [step]="step" 
     [thumb-label]="thumbLabel" 
     [tick-interval]="tickInterval" 
     [value]="step - 1" 
     [ngModel]="assessment.health" 
     (ngModelChange)="assessment.health"> 
    </md-slider> 
    <p>Social Connections</p> 
    <md-slider 
     [min]="min" 
     [max]="max" 
     [step]="step" 
     [thumb-label]="thumbLabel" 
     [tick-interval]="tickInterval" 
     [value]="step - 1" 
     [ngModel]="assessment.social" 
     (ngModelChange)="assessment.social"> 
    </md-slider> 
    <p>Civic Participation</p> 
    <md-slider 
     [min]="min" 
     [max]="max" 
     [step]="step" 
     [thumb-label]="thumbLabel" 
     [tick-interval]="tickInterval" 
     [value]="step - 1" 
     [ngModel]="assessment.civic" 
     (ngModelChange)="assessment.civic"> 
    </md-slider> 
    <p>Housing and Living Skills</p> 
    <md-slider 
     [min]="min" 
     [max]="max" 
     [step]="step" 
     [thumb-label]="thumbLabel" 
     [tick-interval]="tickInterval" 
     [value]="step - 1" 
     [ngModel]="assessment.housing" 
     (ngModelChange)="assessment.housing"> 
    </md-slider> 
    </md-card-content> 
</md-card> 
<button md-raised-button (click)="test()">test button</button> 

答えて

1

サービスでは、assessmentItemsassessmentItemsのインスタンスを作成していないので、初期化された値はnullです。

あなたはassessmentItemsのインスタンスを作成するために注入さdblistメソッドを呼び出す必要があります:

constructor(
    private db: AngularFireDatabase, 
    private afAuth: AngularFireAuth) { 

    this.assessmentItems = db.list('some/path/some/key'); 
} 

ます。またassessmentItemのインスタンスを作成する必要がありますが、それはスニペットどのように(またはのための明確ではありません)あなたはそれを使用するつもりです。

+0

素晴らしいことですが、私はそのtsファイルに添付されたビューで使用するつもりです。今すぐ追加します。私が実際に理解するのに必要な唯一の他の質問は、単一のアイテムから属性を取得することです。ここのモデル。 – theHussle

関連する問題