正确访问可观察值或传递引用

时间:2018-10-20 20:18:37

标签: angular typescript

我是Angular和Typescript的新手。我有一个关于将引用传递到订阅函数的问题。所以我有下面显示的代码...如您所见,我正在尝试从可观察对象分配用户值,但是似乎函数没有看到该引用。我看到了其他一些stackoverflow问题,但是我不知道如何将其转换为纯箭头函数,也不知道如何获取ProfileComponent的实例来成功赋值。

对不起,我对这些东西还很陌生,所以如果有人可以向我解释如何正确处理这种东西,我将非常高兴。除了可观察之外,还有其他选择吗?如果您只有一个要从GET方法中获取一项,那么以可观察的方式获取它不是没有用吗?

请帮助。

import { Component, OnInit } from '@angular/core';
import { UserService } from '../_services';
import { User } from '../_models';
import { userInfo } from 'os';

@Component({
  selector: 'app-profile',
  templateUrl: './profile.component.html',
  styleUrls: ['./profile.component.css']
})
export class ProfileComponent implements OnInit {

  user: User;

  constructor(userService: UserService) {
    this.user = new User();

    const obs$ = userService.getAll().subscribe({
      next(val) {
        console.log('Current object: ', val, '  user ', this.user);
        this.user.userId = val[0].userId;
        this.user.username = val[0].username;
     },
      error(msg) { console.log('Error Object: ', msg); }
      }
      );


    /*
    this.user.userId = obs[0].id;
    this.user.username = obs[0].username;
    this.user.password = obs[0].password;
    */
   }

  ngOnInit() {
  }

}

1 个答案:

答案 0 :(得分:1)

似乎this的上下文丢失了。而是尝试使用箭头函数,如下所示:

const obs$ = userService.getAll().subscribe((val) => {
    console.log('Current object: ', val, '  user ', this.user);
    this.user.userId = val[0].userId;
    this.user.username = val[0].username;
 },
 (msg) => { console.log('Error Object: ', msg); });

这将确保保留this的上下文