Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在角度上可以观察到';找不到财产_Angular_Typescript_Rxjs_Observable - Fatal编程技术网

Angular 在角度上可以观察到';找不到财产

Angular 在角度上可以观察到';找不到财产,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我有一个用户列表,如图所示: 当我点击一个用户时,我想显示一个包含该用户详细信息的新页面。因此,我创建了一个名为“details”的新组件,并将此HTML代码放入details.component.HTML文件中: <div *ngIf="user$"> <h1>{{ user$.name }}</h1> <ul> <li><strong>Username:</strong> {{ user$

我有一个用户列表,如图所示:

当我点击一个用户时,我想显示一个包含该用户详细信息的新页面。因此,我创建了一个名为“details”的新组件,并将此HTML代码放入details.component.HTML文件中:

<div *ngIf="user$">
  <h1>{{ user$.name }}</h1>

  <ul>
    <li><strong>Username:</strong> {{ user$.username }}</li>
    <li><strong>Email:</strong> {{ user$.email }}</li>
    <li><strong>Phone:</strong> {{ user$.phone }}</li>
  </ul>
</div>
所以我在这里做的是: 我将userId作为URL中的参数(这部分工作正常,我使用console.log(this.user$)检查了它,并将其记录下来) 然后,我从我的数据服务中加载具有此Id的用户(这部分也起作用,再次通过日志检查) 然后我从HTML调用用户$up,它首先成功编译,但几秒钟后出现此错误:

ERROR in src/app/details/details.component.html:3:10 - error TS2339: Property 'name' does not exist     
on type 'Object'.

   <h1>{{ user$.name }}</h1>
src/app/details/details.component.html:3:10中出现错误-错误TS2339:属性“name”不存在 在类型“Object”上。 {{user$.name} 属性“username”、“phone”和“email”也会出现相同的错误

我认为问题在于,在html试图访问observable的时候,observable还没有加载,但这就是为什么我把它放在,所以这段代码只有在加载后才能执行。。。 请帮忙

p、 在本教程之后,我提出了以下代码: 但我甚至直接从教程中复制了代码片段,但仍然不起作用

p、 另外,根据教程,我需要导入details.component.ts文件中的Observable,但我的程序告诉我,导入从未使用过。所以我删除了导入,奇怪的是我仍然能够订阅可观察的?也许有问题

以下是控制台日志:


我在这里看到了多个问题

  • 将类型定义从
    Object
    更改为
    any
  • 传统上,变量末尾的美元符号用于表示可观察的。在这里,它并不表示可观察的
  • 编辑代码以简化异步调用。我正在使用RxJS从
    getUser()
    接收来自
    route
    的参数时,从
    getUser()投影可观察的对象。试试下面的方法
  • 从'@angular/core'导入{Component,OnInit};
    从“@angular/router”导入{ActivatedRoute}”;
    从“rxjs/operators”导入{switchMap};
    从“../data.service”导入{DataService};
    @组成部分({
    选择器:“应用程序详细信息”,
    templateUrl:'./details.component.html',
    样式URL:['./details.component.scss']
    })
    导出类详细信息组件实现OnInit{
    用户:任何;
    构造函数(私有路由:ActivatedRoute,私有数据:DataService){}
    恩戈尼尼特(){
    this.route.params.pipe(switchMap(params=>this.data.getUser(params['id']))
    .订阅(
    数据=>{
    这个用户=数据;
    console.log(this.user);
    }
    );
    }
    }
    
  • 在模板中使用安全导航操作符,确保在访问其属性之前定义了
    用户
  • 
    {{user?.name}
    
    • 用户名:{{user?.Username}
    • 电子邮件:{{user?.Email}
    • 电话:{{user?.Phone}

    虽然您的方法在我看来并不干净,但使用正确的类型键入
    user$
    应该可以解决您的问题。首先,您可以通过键入
    any
    :`user$:any验证它。请共享
    this.data.getUser()的代码首先,您不应该对所有内容都使用单个变量。我同意@AshishRanjan,尝试使用“any”而不是“Object”
    
    ERROR in src/app/details/details.component.html:3:10 - error TS2339: Property 'name' does not exist     
    on type 'Object'.
    
       <h1>{{ user$.name }}</h1>