Angular 未定义的属性,在所有警报点填充该属性

Angular 未定义的属性,在所有警报点填充该属性,angular,typescript,Angular,Typescript,因此,根据控制台,我无法在登录后路由到仪表板,因为姓氏属性未定义,但在我的警报中,我可以看到它始终正确填充 login(surName: string, passWord){ const name = this.members.find( x => x.surname === surName) const pass = this.members.find( x => x.password === passWord) if(name &&

因此,根据控制台,我无法在登录后路由到仪表板,因为姓氏属性未定义,但在我的警报中,我可以看到它始终正确填充

login(surName: string, passWord){    
    const name = this.members.find( x => x.surname === surName)
    const pass = this.members.find( x => x.password === passWord)
    if(name && pass){
      for (const element of this.members) {
        if(element.surname === surName){
            alert(element.surname + surName);
            this.persist.setPersistence(surName, element.color);
            alert("You are Logged in" + element.surname + element.color);
            this.router.navigate(['/dashbaord']);
            return;
        }
    }
    }else{
      alert("User Details are incorrect please make sure your username and password is correct");
  }
}
我可以在任何时候检查,从输入的数据到按下的登录到传递到set函数的值。这就是错误发生的地方,但是我可以看到值,所以我不知道发生了什么

import { Injectable } from '@angular/core';
import { Persistance} from '../Persistance/persistance.model'

@Injectable({
  providedIn: 'root'
})
export class PersistService {
  persist: Persistance;
  constructor() { }

  setPersistence(surname : string, color: string){
    alert(surname);
    this.persist.surname = surname;
    this.persist.color = color;
  }
}
错误:

core.js:4197 ERROR TypeError: Cannot set property 'surname' of undefined
我可以看到在分配或使用属性的所有点上定义的属性,所以我不知道这里发生了什么

persist:persistence={};

我们应该做到这一点。您的对象尚未初始化,因此无法为其任何属性赋值。

我不确定发生错误的原因(在
@Injectable
中),但我认为您误解了错误消息。这意味着
this.persist
未定义的
,因此您不能将其视为对象并对其设置属性。您的persistence对象未初始化。它只是声明的,但没有为它指定初始值。因此,如果我的属性是可选的,那么它可以是。。那么你愿意扩大范围并告诉我天气情况吗。。对于该数据的持久常量流,请根据使用带有空白初始值的可选属性。你的答案更好还是只做
persist:persistence=newpersistence()更好这取决于
持久性
是接口还是类。如果它是一个类,则需要将其初始化为
persist:persistence=newpersistence()。如果没有,那么你就使用我发布的解决方案。这是一个类,谢谢你的扩展