如何扩展角度流星的用户模型

时间:2017-02-08 17:05:20

标签: meteor angular-meteor

根据socially project,我尝试扩展用户以添加字段:

export interface User extends Meteor.User {
  experience: number;
}

但是我收到以下错误:

client/imports/app/parties/party-details.component.ts (71, 7): Type 'Observable<User[]>' is not assignable to type 'Observable<User>'.
  Type 'User[]' is not assignable to type 'User'.
    Property 'experience' is missing in type 'User[]'.

据我所知,这是因为集合定义:

export const Users = MongoObservable.fromExisting(Meteor.users);

它使用Meteor.users(没有experience field)而不是我自定义的打字稿定义版本(使用experience field)。

更新

相关文件:

我该如何解决?或者换句话说:如何扩展角度流星项目的用户模型?

更新2

我想将问题重新解释为:如何扩展Meteor用户集?

export const Users = MongoObservable.fromExisting(Meteor.users);

加分问题:在创建新用户时,如何使用0启动字段?

2 个答案:

答案 0 :(得分:1)

  

但是我收到以下错误:

您必须将第31行更改为 users: Observable<User[]>;代替users: Observable<User>; 虽然我甚至没有在没有更改的情况下抛出错误,所以我不知道错误应该何时发生?

无论如何,Meteor Collection查找总是返回一个对象数组,因此users: Observable<User[]>;是正确的。

  

如何扩展Meteor用户集?

至于如何扩展用户: 从技术上讲,您甚至不必为了存储额外的值而扩展它,您为插入的Collection提供的所有值都将存储在该文档中。 扩展的意思是,扩展要插入的用户文档的模型/模式。使用TypeScript时,这通常只是一个接口,但如果您不使用TS,则会有https://github.com/aldeed/meteor-simple-schema等替代方法实际提供设置默认值。我只是这样说是为了帮助你理解这个概念。

虽然界面只会对值进行整形,但它不会设置默认值或类似的值。例如,AFAIK与Java中的接口相同。

所以你所做的就是扩展那个界面,就像你说的那样:

export interface User extends Meteor.User {
  experience: number;
} 

这应该是正确的。你不能扩展“集合”,集合只是在MongoDB中定义集合名称,可能还有谁可以访问它。

  

如何在创建新用户时使用0启动字段

如前所述,您无法为接口设置默认值。您所能做的就是使用experience? : number将值设置为可选,这会将其设置为undefined。 但是,您可以创建一个实现该接口的类,然后设置默认值。

export class SignupUser implements User{
    experience:number=0;
    email: string;
    password: string;
}

然后在第29行的signup.component.ts你可以做

 let signupUser=new SignupUser();
 signupUser.email= this.signupForm.value.email;
 signupUser.password= this.signupForm.value.password;
 Accounts.createUser(signupUser, err => [...])

甚至可以立即创建一个新的SignupUser并直接绑定到这些值。

或者你也可以这么简单的方式

 Accounts.createUser({
    experience: 0,
    email: this.signupForm.value.email,
    password: this.signupForm.value.password
 }

我希望这会对你有所帮助。

答案 1 :(得分:0)

看起来您的问题是,您尝试将用户数组Observable<User[]>的Observable分配给用户Observable<User>的Observable。您是否错误地将Observable<User[]>应用为MongoObservable的类型?