Angular 2-共享服务的实现

小马克

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

错误:TypeError:无法读取未定义的属性“ next”可能是错误的还是丢失的?还有其他遗漏的东西吗?同样在终端窗口上,我收到此错误,但未在我的浏览器控制台上反映出来:错误TS1005:“ =>”。

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) {

}

那么,要使这个简单的组件显示结果并添加新元素并使其可观察,有什么错误和/或缺少什么呢?我以前从未实现过可观察性。

小尼克

您的代码不太清楚,因此很难理解。仍然尝试通过这种方式来帮助您。检查并让我知道它是否无效。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章