2016-07-19 3 views
0

각도 객체 2를 반환하겠다는 약속을 사용하는 데 문제가 있습니다. degree.service의 첫 번째 return 문 (주석 처리되지 않음)은 getDegree의 주석 처리되지 않은 구현과 잘 어울립니다() 안에 build.component. 나는 약속을 사용하여 주석 구현 중 하나로 전환하려고 할 때, 객체는 항상 다시각도 2 약속 전달 객체 관련 문제

import { Injectable } from '@angular/core'; 

import { Degree } from '../components/degree'; 
import { Category } from '../components/category'; 
import { Course } from '../components/course'; 

import { SAMPLE } from '../components/mock-degree'; 

@Injectable() 
export class DegreeService{ 
    getDegree(){ 
    return SAMPLE; 
    // return Promise.resolve(SAMPLE); 
    // return new Promise<Degree>(function (resolve, reject) { 
    // resolve(SAMPLE); 
    // }) 
    } 
} 

build.component.ts "정의되지 않은"

degree.service.ts로 온다 난 당신이 템플릿이 아니라 약속으로 currDeg을 사용하는 방법을 모르는

import { Component, Input, OnInit } from '@angular/core'; 
import { SEMANTIC_COMPONENTS, SEMANTIC_DIRECTIVES } from "ng-semantic"; 

import { Course } from '../course'; 
import { Category } from '../category'; 
import { PaneComponent } from './pane/pane.component'; 
import { Degree } from '../degree'; 

import { DegreeService } from '../../services/degree.service'; 


const blank: Category = { 
    name: '', 
    rank: 1, 
    rulestat: 'no', 
    categories: [], 
    courses: [] 
} 

@Component({ 
    selector: 'my-build', 
    directives: [SEMANTIC_COMPONENTS, SEMANTIC_DIRECTIVES, PaneComponent], 
    templateUrl: `app/components/build/build.component.html`, 
    providers: [DegreeService] 
}) 



export class BuildComponent implements OnInit{ 
    constructor(private degreeService: DegreeService){} 

    level: number = 1; 
    currDeg: Degree; 
    parents = [blank, blank, blank, blank]; 


    setLast(lst: Category){ //pass category objects, do all UI changing here 
    this.level = lst.rank + 1; 
    this.parents[lst.rank - 1] = lst; 
    } 

    getDegree(){ 
    //this.degreeService.getDegree().then(deg => this.currDeg = deg) 
    this.currDeg = this.degreeService.getDegree(); 
    } 

    ngOnInit(){ 
    this.getDegree(); 
    } 
} 
+0

정확하게 "* 객체는 항상"정의되지 않음 "*으로 돌아옵니다. 언제 접근합니까 (너무 늦었습니까)? 범위 애플리케이션이 누락 되었습니까? – Bergi

답변

0

는 상황이 비동기. 따라서 해당 객체는 나중에 설정 될 것이므로 (약속이 해결 될 때) 처음에 정의되지 않을 것입니다. 약속이 직접적으로 Promise.resolve으로 해결되는 경우에도 마찬가지입니다.

export class DegreeService{ 
    getDegree(){ 
    return Promise.resolve(SAMPLE); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    providers: [DegreeService], 
    templateUrl: 'src/app.html' 
}) 
export class App { 
    constructor(private degreeService:DegreeService) { 
    } 

    getDegree(){ 
    this.degreeService.getDegree().then(deg => { 
     this.currDeg = deg; 
     console.log('this.currDeg = ' + this.currDeg); // <------ 
    }); 
    } 

    ngOnInit(){ 
    this.getDegree(); 
    } 
} 

이 plunkr : https://plnkr.co/edit/1fxE0okyMNj2JktURY4w?p=preview을 참조하십시오.

+0

감사합니다! 당신은 그것이 템플릿 문제라는 것이 옳았습니다. 지역 학위 객체로 직접 해결 된 경우에도 템플릿은 currDeg에 너무 빨리 액세스하려고 시도했지만 아무 것도 없었습니다. currDeg를 공백도 객체로 초기화하여 문제가 해결되었습니다. –