第一次学习打字稿和Angular2.我正在创建一个只能获得和发布的通用服务,以便可以在整个应用程序中使用它.我已将我的应用程序基于Angular的示例,来自我的问题是我的"问题服务"正在使用"服务器服务",但抱怨this.ServerService.getData is not a function不是一个函数. serverservice import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; @Injectable() export class ServerService { private apiUrl = 'app/users.json'; constructor (private http: Http) {}
以下是关于 angular2-observables 的编程技术问答
我正在尝试为我的API服务编写单元测试,但在捕获HTTP错误时遇到了一些困难.我正在关注此所有单元测试都通过服务丢弃错误(由于错误HTTP状态代码)而分开.我可以通过登录response.ok来说明这一点.根据我阅读的内容,这与单位测试有关,而不是异步执行的,因此,不等待错误响应.但是,我不知道为什么在这里是这种情况,因为我在async()方法中使用了async()实用程序函数. API服务 get(endpoint: string, authenticated: boolean = false): Observable { endpoint = this.formatEndpoint(endpoint); return this.getHttp(authenticated) // Returns @angular/http or a wrapper for handling auth headers .get(endpoint)
我目前正在使用Ionic 2使用基本的聊天应用程序,并且已经遇到了几次语法: private someFunction(): Observable { 我一直在想了解在做什么,但不确定这是Ionic 2,Angular 2还是Typescript的特定内容. 我搜索了每个文档,但尚未找到对此的任何参考. 解决方案 正如评论中所述的那样,它是一个打字稿语法方面,但在您的情况下,您使用的是可观察的RXJS,这是观察者设计模式. firt,class List { private _list: T[] = []; public get(index: number): T { return this._list[index]; } public add(item: T) { return this._list.push(item); } } 以便您可以创建所有T的List: let myStrin
是否有一种方法可以比较两个可观察到的当前长度? 编辑:是将数组与可观测值进行比较. 我想将所有元素与它们进行比较(请参见下面的示例). 在我试图这样做的时候,它们已经完全加载了.不等待任何数据. 例如,我想做: if (array1.length item.isSelected = true); 我尝试使用管道,地图,点击,但它们在一段时间后就解决了,对我不起作用.我知道这可能是观察到的概念的破坏,但是想知道是否有选择? 解决方案 使用另一个内部的一个Observable的解析值. ob1 = of([1,2,3]) ob2 = of([1,2,3, 4]); foo() { this.ob1.pipe( switchMap((data1)=> { return this.ob2.pipe( map((dat
我有需要/渴望在forkjoin中使用六个以上的参数.目前,基于另一个相关问题似乎不可能将超过6个参数发送到forkjoin. 但是,基于官方文档,它说:" ForkJoin是一个操作员,可以采用任何可以作为数组或直接作为参数传递的可观察到的物品." ." 在 好吧,我正在这样做,并且我会收到一个错误ts2322:type'foo'不能分配给'bar []''. 在我的研究中,我还发现,如果您承诺返回不同类型,则最好不要将参数作为数组发送,因为它将输入将它们铸造为所有相同类型. - source 这是我的代码.我正在使用最新版本的打字稿和Angular4. ngOnInit() { this.spinner.show(); Observable.forkJoin( this.loadParams(), // Returns an Observable this.se
我正在尝试使用RXJ学习反应性编程.我试图使用 observable.from()方法从数组中创建一个可观察的,但是我遇到了一个错误: 属性'来自"类型"不存在于'type offable' i使用Angular CLI脚手架,因此正确导入了包括RXJS软件包在内的所有依赖项. 在 app.com.ponent.ts 我添加以下导入语句: import { Observable} from 'rxjs/Observable' import 'rxjs/observable/from' 和我的AppComponent类看起来像这样: export class AppComponent { numbers: number[] = [1, 2, 3, 4, 5]; callMyObservable() : void { Observable.from(this.numbers); } } ,但我会得到上述编译时间错误.
我目前正在使用AngularFire2进行Angular 2项目,并且我正在尝试将Firebaselistobservable转换为承诺.我知道这没有多大意义,因为可观察到的功能更有用,但是此功能将成为链接多个承诺的另一个功能的一部分.而且我不熟悉如何订阅诺言链中的可观察到的物品……该功能在服务中执行,但是它似乎不会返回任何内容. 基本上,我要做的是在已经存在特定名称的对象并返回true或false的对象. 服务 constructor(private _af: AngularFire) { } nameExists(name: string): Promise { return this._af.database.list('users') .map(users => { let exists = false; users.forEach(user => { if(user.name.toLowerCase() ==
我是Angular的新手,我有以下情况,即我有一个服务getAnswers():Observable[]>和两个相互关联的组件. 在线引用 动态形式 在线引用组件在其ngOnInit()方法中调用服务getAnswers():Observable[]>,结果将其传递给组件 动态形式. 说明情况,这是我两个组件的代码: 在线 - quote.component.html:
在线 - quote.component.ts: @Component({ selector: 'app-online-quote', templateUrl: './online-quote.component.html', sty
嗨,我有一个可观察的用户$,带有许多属性(名称,标题,地址...) component{ user$:Observerable; constructor(private userService:UserService){ this.user$ = this.userService.someMethodReturningObservable$() } } 是否有一种方法可以使用HTML模板中的异步管订阅并将其绑定到像这样的本地变量
{{user.name}} 我知道可以在构造函数中订阅它,然后在Onleave/Ondestroy中取消订阅,但是我很好奇是否可以使用异步管. 欢呼 解决方案 #是到目前为止,本地变量尚未在Angular中实现,这个封闭的问题可以监视有关相关问题的引用. 由于Angular 4更新了ngIf和ngFor指令的
使用Angular 4.3.1和HTTPClient,我需要通过异步服务来修改请求和响应,以纳入httpclient的Httpinterceptor, 修改请求的示例: export class UseAsyncServiceInterceptor implements HttpInterceptor { constructor( private asyncService: AsyncService) { } intercept(req: HttpRequest, next: HttpHandler): Observable> { // input request of applyLogic, output is async elaboration on request this.asyncService.applyLogic(req).subscribe((modifiedReq) => {
在我的Angular 2应用中,我有一项使用rxjs库中的Observable类的服务. import { Observable } from 'rxjs'; 目前我只是在使用Observable,以便可以使用toPromise()函数. 我在另一个以这种方式导入并从rxjs/Rx导入的stackoverflow问题将从rxjs库中导入很多不必要的内容,以增加页面加载时间和/或代码库. 我的问题是,导入Observable的最佳方法是什么,因此我可以使用toPromise()函数而无需导入其他所有功能? 解决方案 rxjs v 6.* 它被较新版本的RXJS简化了. 1)操作员 import {map} from 'rxjs/operators'; 2)其他 import {Observable,of, from } from 'rxjs'; 而不是链接我们需要管道.例如 旧语法: source.map().swi
假设我有一个订阅服务功能的组件: export class Component { ... ngOnInit() { this.service.doStuff().subscribe( (data: IData) => { doThings(data); }, (error: Error) => console.error(error) ); }; }; 订阅呼叫以参数为两个匿名函数,我设法为数据功能设置了一个工作单元测试,但是业力不接受错误的覆盖范围. 我尝试在控制台上监视.ERROR功能,丢下错误,然后期望间谍被调用,但这并不是完全这样做. 我的单位测试: spyOn(console,'error').and.callThrough(); serviceStub = { doStuf
我正在编写通过RXJS可观测值实现的间隔计时器编写Angular2应用程序,并且仅注意到Chrome浏览器中的observable.interval()和observable.timer()的奇怪行为. Angular组件应每秒钟一次打印在控制台中的秒数,但是在背景选项卡上,这不是按预期工作 - 函数每x+1秒触发每x+1秒,其中x在Interval funciton 中明确指定了x间隔 角组件代码: ngOnInit() { let a = Observable.interval(1000).subscribe(() => { let date = new Date(); console.log(date.getSeconds()); }); } 示例:tab1上的控制台输出(定义为上述计时器的选项卡): 37
我有一个计时器: initiateTimer() { if (this.timerSub) this.destroyTimer(); let timer = TimerObservable.create(0, 1000); this.timerSub = timer.subscribe(t => { this.secondTicks = t }); } 60分钟后,我将如何将条件添加到用户?我已经尝试查看几个问题( this =" https://stackoverflow.com/questions/42557993/42557993/how-do-i-i-stop-observable-timer-or-observable-interval-autopicaly--ferter-ce"> this ),但不是点击我.仍然是RXJS模式的新手... 解决方案 您不需要RXJ.您可以使用良好的旧setT
我需要在一个间隔中刷新组件页面中的数据.另外,我需要在采取一些操作后刷新数据.我正在使用服务中的corservables,以便在响应准备就绪时可以订阅.我将订阅推向一个对象,以便可以在ngDestroy上清楚地清楚,我认为我有以下方法可以实现相同的方法. 方法1:setInterval 我已经在ngOnInit上设置了一个间隔,该间隔将以相等的间隔调用RefreshData.间隔对象将使用ngOnDestroy方法中的clearInterval清除. export class MyComponent implements OnInit, OnDestroy { private subscription: Subscription = new Subscription(); data: any; interval: any; ngOnInit() { this.refreshData(); this.in
我正在执行注册操作,而在用户成功记录我的ID时,我正在后端进行注册操作. " 105",当寄存器失败(用户已经存在)时,我返回" user_exists".我已经检查了邮递员的请求,并且响应的正文正确. 在这两种情况下,我都会返回"普通/文本". 但是,我找不到如何通过可观察到的对象获得响应的正文. 在register.component.ts中: userExists = ""; onSubmit() { const newUser : RegisterUser = { email: this.register.email, password: this.register.password, firstName: this.register.firstName,
我的用例是: 用户请求从我们的API中请求资产,该资产由于JWT到期而失败(以HTTPONLY cookie传递)-API返回401状态代码. 我们使用refresh_token再次对其进行身份验证(不做任何事情) 我们将新的JWT发送到我们的API,以将其设置为Httponly cookie,以替换已过期的cookie. 然后,我们想在步骤1中重试用户对API的原始请求. 我正在尝试使用 nb.我正在使用rxjs V5 在 export const fetchAssetListEpic = (action$, store) => { return action$.ofType('FETCH_ASSET_LIST') .switchMap( action => { const options = { crossDomain: true, withCredentials: true, url: uriG
为了在Angular2不同组件之间传递值,我使用注入不同组件的不同服务. 在我的pagesservice组件中,我定义了一个行为主体并要通过一个值. import { Injectable } from '@angular/core'; import { ApiService } from '../../apiService/api.service'; import { Playlists } from '../shared/playlists.model'; import { Subject, BehaviorSubject } from 'rxjs/Rx'; @Injectable() export class PagesService { private currentPlaylists: Subject = new BehaviorSubject(new Playlists()); constructor(p
我一直在想了解这3: 主题 replaySubject 我想使用它们,知道何时和为什么,使用它们的好处是什么,尽管我阅读了文档,看过教程并搜索了Google,但我对此没有任何意义. 那么他们的目的是什么?真实的情况将不需要代码. 我更喜欢一个干净的解释,不仅是" a+b => c您被订阅...." 谢谢 解决方案 这确实取决于行为和语义.用 Subject - 订阅者只能在订阅后发出发出的值.问问自己,那是你想要的吗?订户是否需要了解以前的值?如果不是,那么您可以使用它,否则选择其他之一.例如,使用组件到组件通信.假设您有一个组件,可以在单击按钮上发布其他组件的事件.您可以使用带有主题的服务进行交流. BehaviorSubject - 最后一个值是缓存的.订户将在初始订阅后获得最新值.该主题的语义是表示随时间变化的值.例如,登录用户.初始用户可能是匿名用户.但是,一旦用户登录,新值就是经过身份验证的用户状态. BehaviorS