【问题标题】:Angular 2 - Implementation of shared servicesAngular 2 - 共享服务的实现
【发布时间】:2016-06-29 20:37:56
【问题描述】:

我正在尝试实施我在 Stack Overflow 中找到的解决方案,但面临困难。我有一个服务和一个组件,但在实现上有些地方不正确。

错误:TypeError: Cannot read property 'next' of undefined 可能有什么问题或遗漏?是不是还缺少什么? 同样在我的终端窗口上,我收到了这个错误,但它没有反映在我的浏览器控制台上:error TS1005: '=>' expected.

import {Injectable} from 'angular2/core';
import {Observable} from 'rxjs/Observable';
import {Observer} from 'rxjs/Observer';
@Injectable()
export class GlobalService {
data: any;
dataChange: Observable<any>;
constructor() {
this.dataChange = new Observable((observer:Observer) { // this is the TS1005 error.
  this.dataChangeObserver = observer;
});
}
setData(data:any) {
this.data = data;
this.dataChangeObserver.next(this.data); //Line of the critical error (next)
} 
}

这是使用服务的组件....(我将只放置相关行)

import {GlobalService} from "../../../global.service";
import(...)
@Component({
    providers: [GlobalService],
template: `<p>{{myData}}<>/p><span (click)="addTag(1, 'test')">Add more</span>` 
});
export class MyComponent  {
    addTag (id,desc){
       this._global.setData({ attr: 'some value' });
    }
}
constructor(private _global: GlobalService) {

}

那么,让这个简单的组件显示结果并添加新元素并且可观察有什么问题和/或缺失?我以前从未实现过 observables。

【问题讨论】:

    标签: typescript angular angular2-services


    【解决方案1】:

    您的代码不是那么清晰,因此变得难以理解。仍然试图以这种方式帮助你。检查并让我知道它是否不起作用。

    ...
    import {Injectable,EventEmitter,Output} from 'angular2/core';
    @Injectable()
    export class GlobalService {
    data: any;    
    @Output dataChangeObserver: EventEmitter=new EventEmitter();
    
      constructor() {
      });
    
      setData(data:any) {
        this.data = data;
        this.dataChangeObserver.emit(this.data); 
        return this.dataChangeObserver;
      } 
    }
    

    export class MyComponent  {
        constructor(private _global: GlobalService) {
    
         }
    
        addTag (id,desc){
           this._global.setData({ attr: 'some value' })
                     .subscribe((res)=>{this.myData=res},
                     err=>console.log(err),   //removed dot
                     ()=>console.log('recived data') //removed dot                    
                      );
         }
    }
    

    【讨论】:

    • 嗨@micronyks!你能确认一下吗? dataChangeObserver: EventEmitter=new EventEmitter(); (通用类型 'EventEmitter' 需要 1 个类型参数。______ 和 this._global.setData({ attr: 'some value' }) .subscribe((res)=>{this.myData=res}, .err=>console.log(err), .()=>console.log('recived data') ); -----> 属性 'myData' 不存在,并且在连接错误的点上需要参数表达式和 ()
    • 哦,可能是. (dot) 可能是问题所在。等一下。我正在更新答案。
    • LOL...让我试着变得更人性化...你写的那行“new EventEmitter();”给了我一个错误:通用类型 'EventEmitter' 需要 1 个类型参数
    • 出了什么问题?
    猜你喜欢
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2017-12-21
    • 2017-01-20
    • 2017-04-15
    • 2019-05-03
    相关资源
    最近更新 更多