2016-05-01 19 views
7

Quan sát là không thể assigend, file package.json tôi giữLoại 'Quan sát <{}> ' là không thể chuyển nhượng để gõ vào góc 2

"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" 

Vấn đề xảy ra khi thiết bị đầu cuối của tôi bắt đầu soạn thảo nó cho thấy tôi một errormessage

nhắn:

'\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 \'{}\'.' }

trong thành phần dịch vụ của tôi this.loggedUser $ là không thể khởi tạo bởi Quan sát mới bên trong constructor và nó phá vỡ tất cả mọi thứ.

Đây là của tôi phần dịch vụ

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) 
    ); 
    } 


} 

trong giao diện của tôi, tôi có

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

nếu tôi đặt một loại trong các nhà xây dựng như

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

sau đó nó cho thấy tôi một khác nhau lỗi trên thành phần ứng dụng, lỗi không đến trong thiết bị đầu cuối của nó trên bảng điều khiển và nó là EXCEPTION: Lỗi Loại: _this.loggedUserObserver là undefined

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(); 
    } 
} 
+0

Bạn không nên có loại cho Đài quan sát mới trong hàm tạo? Tôi nghĩ rằng thông báo lỗi chỉ ra cho bạn. – majodi

+0

tôi đã thử với điều này nhưng nó đưa tôi đến một lỗi mới, trong thành phần ứng dụng của tôi tôi có [code] lớp xuất này AppComponent { loggedUser: Observable <{}>; loggedUserInfo: User; hàm tạo (private _userService: UserService) { } ngOnInit() { this.loggedUser = this._userService.loggedUser $; this._userService.getLoggedUser(); } } [/ code] và bây giờ nó nói với tôi rằng loggedUserObserver không được xác định –

+0

hãy nhìn vào câu hỏi được cập nhật của tôi, giải pháp của bạn có lỗi từ thiết bị đầu cuối nhưng ném một ngoại lệ trên bàn điều khiển. –

Trả lời

9

được tìm kiếm rất nhiều và ý kiến ​​từ #majodi cũng giúp. Trong service.ts tôi đã khởi tạo biến tôi như thế này

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

và trong các nhà xây dựng dịch vụ

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

và trong app.component.ts tập tôi đã được gọi là quan sát của tôi theo cách này

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

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

và những cách này giải quyết được vấn đề.

Các vấn đề liên quan