【问题标题】:variable is undefined outside of subscribe() method Angular 2变量在订阅()方法Angular 2之外未定义
【发布时间】:2018-02-22 05:34:21
【问题描述】:

我正在处理 angular 2 并且在 subscribe() 函数之外的变量出现未定义错误。employee 变量 id undefinedsubscribe() 函数之外。请帮助我。谢谢。下面是代码

export class DetailsComponent implements OnInit {
  employee;

  constructor(private _location:Location, private _empService:EmpService, private route:ActivatedRoute) { }
  ngOnInit() {
      //let params:any = this.route.snapshot.params;

      this.editEmployee(6); //I have tried to pass static value
      console.log(this.employee); //Here this is undefined  
  }
  backClicked() {
        this._location.back();
    }

   editEmployee(id) {
    this._empService.getEmployee(id).subscribe((employee)=> {
       this.employee = employee[0];
       console.log(employee[0]); //This have below output in console
       //{id: "6", emp_name: "Mohit", emp_email: "mohit@ommzi.com", emp_phone: "9800000", emp_status: "y"}
    })
  }
}

【问题讨论】:

    标签: angularjs-scope angular2-services


    【解决方案1】:

    因为您使用的是 Observables,所以在设置员工之前会调用 console.log(this.employee)。我会在 editEmployee 中建议您返回一个 Promise 并使用:

    editEmployee(id) {
        return new Promise((resolve) => {
            this._empService.getEmployee(id).subscribe((employee)=> {
                this.employee = employee[0];
                console.log(employee[0]);
                resolve();
            });
        });
    }
    
    this.editEmployee(6).then(()=> {
        console.log(this.employee);
    }
    

    请注意,这不是最好和最漂亮的解决方案,但如果你想保持你的代码保持这种风格,我会这样做。

    【讨论】:

    • @PsychoPfanze:感谢您的回复,但此解决方案不起作用,并且还有另一个错误“属性 'then' 在类型 void 上不存在”
    • 对不起,我没有发布整个代码,我会编辑我的答案以使其适合你:D
    • :您的回答是正确的,但不幸的是我的问题没有解决我的问题。我无法在.html 文件中使用变量employee
    • 使用管道:json
    • <span *ngIf="employee | async as $employee">{{employee | json}}</span>
    猜你喜欢
    • 2020-05-18
    • 2017-06-19
    • 2021-05-16
    • 2018-05-14
    • 2020-06-28
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多