gpt4 book ai didi

angular - 类型\'Observable<{}>\' 不可分配给 Angular 2 中的类型

转载 作者:太空狗 更新时间:2023-10-29 17:13:49 24 4
gpt4 key购买 nike

Observable 无法分配,我的 package.json 文件保存

"angular2": "2.0.0-beta.17",
"systemjs": "0.19.24",
"es6-promise": "^3.0.2",
"es6-shim": "^0.35.0",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.6",
"zone.js": "0.6.12"

当我的终端开始编译时出现问题,它向我显示一条错误消息

留言:

'\u001b[31mresources/assets/typescript/services/user.service.ts(25,5): \u001b[39merror TS2322: Type \'Observable<{}>\' is not assignable to type \'Observable\'.\n Type \'{}\' is not assignable to type \'User[]\'.\n Property \'length\' is missing in type \'{}\'.' }

在我的服务组件中,this.loggedUser$ 无法通过构造函数中的新 Observable 进行初始化,它破坏了整个过程。

这是我的服务组件

import {Injectable} from 'angular2/core';
import {Http,Response,Headers} from 'angular2/http';

import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';
import {User} from '../interfaces/interfaces';
export var API_ENDPOINT = 'http://localhost:8080/api';


@Injectable()
export class UserService {

loggedUser$: Observable<User[]>;
private loggedUserObserver: Observer<User[]>;
private loggedUserInfo:{
users: User[]
};

constructor(private _http: Http) {
this.loggedUser$ = new Observable(observer => this.loggedUserObserver = observer).share();
this.loggedUserInfo = { users: [] };
}


getLoggedUser(){
return this._http.get(API_ENDPOINT+'/getLoggedUser')
.map((res:Response)=>res.json())
.subscribe(
data => {
this.loggedUserInfo.users = data;
this.loggedUserObserver.next(this.loggedUserInfo.users);
},
err => console.error(err),
() => console.log(this.loggedUserInfo.users)
);
}


}

在我的界面中有

export interface User {
id?: number,
name?: string,
email?:string,
email2?: string,
password?: string,
mobile?: string,
profilePicture?:string,
userTimeZone?: string
}

如果我在构造函数中放置一个类型,例如

this.loggedUser$ = new Observable<User[]>(observer => this.loggedUserObserver = observer).share();

然后它在应用程序组件上向我显示了一个不同的错误,错误不是来自终端,而是来自控制台,它是异常:类型错误:_this.loggedUserObserver 未定义

import {Component,OnInit,} from 'angular2/core';
import {Router,ROUTER_DIRECTIVES} from 'angular2/router';
import {RouteConfig, RouteData} from 'angular2/router';

import {MyProfileComponent} from './settings/my-profile.component';
import {MyCompaniesComponent} from './company/my-companies.component';
import {MyTasksComponent} from './tasks/my-tasks.component';
import {UserComponent} from './user/user.component';

import {Observable} from 'rxjs/Observable';
import 'rxjs/Rx';
import {UserService} from './services/user.service';
import {User} from './interfaces/interfaces';


@Component({
selector: 'my-app',
//templateUrl: 'appView/front.html',
template:`{{loggedUser.name}}`,
directives:[ROUTER_DIRECTIVES, MyProfileComponent, MyCompaniesComponent,UserComponent],
providers: [UserService],


})

export class AppComponent{
loggedUser: Observable<User[]>;
loggedUserInfo:User;
constructor (private _userService: UserService){
}


ngOnInit(){
this.loggedUser = this._userService.loggedUser$;
this._userService.getLoggedUser();
}
}

最佳答案

进行了大量搜索,#majodi 的评论也有帮助。在 service.ts 中,我已经像这样初始化了我的变量

loggedUser$: Observable<User[]>;  
loggedUserObserver: Observer<User[]>;
loggedUserInfo:User[];

在服务构造函数中

constructor(private _http: Http) {
this.loggedUser$ = new Observable<User[]>(
observer => {
this.loggedUserObserver = observer;
}
).share();
}

并且在 app.component.ts 文件中我以这种方式调用了我的可观察对象

ngOnInit(){     
this._userService.loggedUser$.subscribe(latestData => {
this.loggedUserInfo1 = latestData;

});
this._userService.getLoggedUser();
}

这些解决了问题。

关于angular - 类型\'Observable<{}>\' 不可分配给 Angular 2 中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com