我在Angular-cli的Angular 2决赛中使用了observable.
package.json中的依赖项:
"dependencies": {
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/core": "2.0.0",
"@angular/forms": "2.0.0",
"@angular/http": "2.0.0",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/router": "3.0.0",
"bootstrap-sass": "^3.3.7",
"chart.js": "^2.2.2",
"core-js": "^2.4.1",
"d3": "^4.2.3",
"d3-tip": "^0.7.1",
"ionicons": "^3.0.0",
"moment": "^2.15.1",
"rxjs": "5.0.0-beta.12",
"ts-helpers": "^1.1.1",
"zone.js": "^0.6.23"
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序在Safari 9.1.2以外的每个浏览器中都能正常工作 - 它会将此错误消息抛出到控制台:
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:4200/Observable.js.map
Run Code Online (Sandbox Code Playgroud)
我试图在angular_cli.json中导入Rxjs:
"scripts": [
"../node_modules/rxjs/Rx.js"
],
Run Code Online (Sandbox Code Playgroud)
另外,我试图将rxjs导入到app.module.ts和这样的工作组件:
import {Observable} from 'rxjs/Rx';
Run Code Online (Sandbox Code Playgroud)
但是继续得到同样的错误.
难道我做错了什么?很奇怪只有Safari遇到这个错误.
我正在尝试为我的API服务编写单元测试,但在捕获HTTP错误时遇到一些问题.我遵循本指南以及Angular2文档,因为该指南在某些小范围内(稍微)过时了.
所有单元测试都与服务引发错误的单元测试分开(由于HTTP状态代码错误).我可以通过退出告诉我response.ok.从我所读到的,这与单元测试没有异步执行有关,因此,不等待错误响应.但是,我不知道为什么会出现这种情况,因为我async()在beforeEach方法中使用了效用函数.
get(endpoint: string, authenticated: boolean = false): Observable<any> {
endpoint = this.formatEndpoint(endpoint);
return this.getHttp(authenticated) // Returns @angular/http or a wrapper for handling auth headers
.get(endpoint)
.map(res => this.extractData(res))
.catch(err => this.handleError(err)); // Not in guide but should work as per docs
}
private extractData(res: Response): any {
let body: any = res.json();
return body || { };
}
private handleError(error: Response | any): Observable<any> {
// TODO: Use a remote …Run Code Online (Sandbox Code Playgroud) 如果是,我必须在customerNameValidator中返回什么
异步验证失败/成功我的'customerName'FormControl无效?
this.customerForm = this.formBuilder.group({
customerName:
[this.newCustomerName, [Validators.minLength(2), Validators.required],[this.customerNameValidator.bind(this)]]
});
customerNameValidator(c: AbstractControl)
{
return this.service.customerExists(c.value,this.companyId).subscribe(response =>
{
if(response == true)
{
alert("true");
}
else
{
alert("false");
}
});
}
Run Code Online (Sandbox Code Playgroud) share()运算符应用于BehaviorSubject.BehaviorSubject具有初始值.
目标是创建单个共享订阅.但是,当BehaviorSubject具有初始值时,此共享订阅似乎不起作用.
获得意外结果.
代码如下所示:
let subject = new Rx.BehaviorSubject(0);
let published = subject
.do(v => console.log("side effect"))
.share();
published.subscribe((v) => console.log(v+" sub1"));
published.subscribe((v) => console.log(v+" sub2"));
subject.next(1);
Run Code Online (Sandbox Code Playgroud)
结果:
"side effect"
"0 sub1"
"side effect"
"1 sub1"
"1 sub2"
Run Code Online (Sandbox Code Playgroud)
预期结果:
"side effect"
"0 sub1"
"1 sub1" <------------- this is missing from actual result
"side effect"
"1 sub1"
"1 sub2"
Run Code Online (Sandbox Code Playgroud) 我在service.ts中有一个方法getData(),如下所示.这将返回一个Observable.另一个服务ApiService也有一个方法get(),它也返回一个Observable.
getData(args, parentKey?):any {
return new Observable(observer => {
this.apiService.get(args).subscribe(
response => {
observer.next({
data: response['data'],
status: ($.isEmptyObject(response) ? false : true)
});
},
error => console.log("error : ", error),
() => console.log("finished")
);
});
}
Run Code Online (Sandbox Code Playgroud)
我试图在我的组件的异步 API调用中重用此getData()方法.见下文:
this.myService.getData({
url: 'apiUrl1',
method: 'Method1',
parameters: {}
}).subscribe(response => {
if (response['status']) {
console.log('Processed apiUrl1');
}
});
this.myService.getData({
url: 'apiUrl2',
method: 'Method2',
parameters: {}
}).subscribe(response => {
if (response['status']) {
console.log('Processed apiUrl2');
}
});
this.myService.getData({ …Run Code Online (Sandbox Code Playgroud) 我有一个UsernameService返回包含json对象的observable.在AnotherService,我想从UsernameService对象中注入一个值.
到目前为止,我能够从UsernameService订阅observable,我可以在控制台中显示它.我甚至可以向下钻取并在控制台中显示对象中的一个值.但是,我不明白如何将该值赋给我可以使用的变量.相反,当我尝试将值赋给变量时,在控制台中我得到:订阅者{closed: false, _parent: null, _parents: null...etc
这是我在控制台中成功显示可观察值的示例:
import { UsernameService } from './username.service';
import { Injectable, OnInit } from '@angular/core';
import 'rxjs/Rx';
@Injectable()
export class AnotherService {
username: any[] = [];
constructor(private getUsernameService: UsernameService) { }
someMethod() {
let myFinalValue = this.getUsernameService.getUsername()
.subscribe(username => console.log(username.data[0].AccountName));
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致控制台正确显示AccountName我试图分配给变量的字段的值myFinalValue.但是,我似乎无法弄清楚我哪里出错了.
当我尝试使用相同的技术来简单地获取值(而不是登录控制台)时,我得到了通用:订阅者{closed: false, _parent: null, _parents: null...等,正如我之前提到的.
以下是导致我的错误的代码示例:
import { UsernameService } from './username.service';
import { Injectable, OnInit } …Run Code Online (Sandbox Code Playgroud) 我在订阅一系列可观察的问题。就我而言,我有一个ID数组,我需要从状态中获取所有ID,并将所有结果组合成一个可观察的对象,并订阅该可观察的对象。我需要我的订阅者最终将获得一系列已解析的可观测值。
另外,我还需要保持此订阅的开放状态,因此,如果我的内在可观察的更改之一将通知我的订阅者。
这是我的代码:
getTransactionsByIDs(transactionsIDs){
return Observable.of(transactionIDs
.map(transactionID => this.getTransactionByID(transactionID)));
}
this.transactionsService.getTransactionsByIDs(transactionsIDs)
.subscribe(transactions=>{
....
})
Run Code Online (Sandbox Code Playgroud)
订户函数中上述代码的结果是未解析存储的数组。
如何解决每个商店并将它们融合在一起?
我还尝试过在transactionID上使用Observable.from()将每个ID转换为一个可观察的对象,然后对其进行解析。它工作正常,但随后我的订户分别收到每个ID的通知。如果有一种方法可以批量处理所有Observable.from()结果(并保持订阅打开),请告诉我。
这是我的Observable.from()的样子:
getTransactionsByIDs(transactionsIDs){
return transactionIDs
.mergeMap(transactionID => this.getTransactionByID(transactionID));
}
this.transactionsService.getTransactionsByIDs(Observable.from(transactionsIDs))
.subscribe(transactions=>{
....
})
Run Code Online (Sandbox Code Playgroud)
谢谢。
comment.component.ts:
import { Component, OnInit } from '@angular/core';
import { Router} from '@angular/router'
import { Comment } from 'comment entity path'
import {CommentService} from 'comment service path'
import { Observable } from 'rxjs/Observable';
@Component({
template: ` <ul><li *ngFor="let comment of comments|async"> {{comment.Name}}</li></ul>`
})
export class CommentComponent implements OnInit {
comments: Observable<comment[]>;
constructor(private router: Router, private commentService: CommentService) {
}
ngOnInit() {
this.comments = this.getComments();
}
getComments() {
return this.commentService.getComments();
}
}
Run Code Online (Sandbox Code Playgroud)
comment.service.ts
import { Injectable } from '@angular/core';
import { …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Angular (4.1.2) Web 应用程序以及相应的 ASP.Net Core (1.1) Web API。
我有一个 Angular 服务,它向我的 Web API 发出数据 http 请求,并且从 Angular 服务返回的对象中的日期不是类型Date。
Tasks在我的场景中,我的 Web 应用程序从 SQL 数据库获取数据,每个应用程序都Task包含 start 和 finish DateTime。我的 TasksController 使用 AutoMapper 将每个任务映射Task到一个TaskViewModel对象,并且我的 TasksControllerTaskViewModel有一个类型为 的 start 和 finish 属性DateTime。
如果我在 TasksController 中放置一个断点并检查TaskViewModel要返回的对象,那么在请求之后,开始和结束属性都是类型DateTime,因此日、月、小时等都可以。
在 Angular 中,我有一个task-api.service.ts包含以下代码的文件:
public getTasks(): Observable<Task[]> {
let tasksArray: Observable<Task[]> = this.http.get("/api/tasks").map((response: Response) => {
return <Task[]>response.json();
}).catch(this.handleError); …Run Code Online (Sandbox Code Playgroud) 我正在使用材料表原理图,但不知道如何
我认为重要的部分是文件connect()中的方法datasource.ts。this.data只是一个数组。
/**
* Connect this data source to the table. The table will only update when
* the returned stream emits new items.
* @returns A stream of the items to be rendered.
*/
connect(): Observable<any[]> {
// Combine everything that affects the rendered data into one update
// stream for the data-table to consume.
const dataMutations = [
observableOf(this.data),
this.paginator.page,
this.sort.sortChange
];
// Set the paginators length
this.paginator.length = this.data.length; …Run Code Online (Sandbox Code Playgroud) observable angular-material angular-material2 angular2-observables angular
angular ×7
observable ×2
rxjs ×2
rxjs5 ×2
typescript ×2
angular-cli ×1
datetime ×1
ngrx ×1
unit-testing ×1