标签: angular2-services

在RxJs 5中分享Angular Http网络调用结果的正确方法是什么?

通过使用Http,我们调用一个执行网络调用并返回http observable的方法:

getCustomer() {
    return this.http.get('/someUrl').map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)

如果我们采用这个可观察的并添加多个订阅者:

let network$ = getCustomer();

let subscriber1 = network$.subscribe(...);
let subscriber2 = network$.subscribe(...);
Run Code Online (Sandbox Code Playgroud)

我们想要做的是确保这不会导致多个网络请求.

这可能看起来像是一个不寻常的场景,但实际上很常见:例如,如果调用者订阅了observable以显示错误消息,并使用异步管道将其传递给模板,那么我们已经有两个订阅者.

在RxJs 5中这样做的正确方法是什么?

也就是说,这似乎工作正常:

getCustomer() {
    return this.http.get('/someUrl').map(res => res.json()).share();
}
Run Code Online (Sandbox Code Playgroud)

但这是在RxJs 5中这样做的惯用方式,还是我们应该做其他事情呢?

注意:根据Angular 5 new HttpClient,.map(res => res.json())所有示例中的部分现在都没用,因为现在默认采用JSON结果.

rxjs angular2-services rxjs5 angular

281
推荐指数
11
解决办法
8万
查看次数

EventEmitter的正确用法是什么?

我已经在CustomHttp 中读取了Access EventEmitter Service等问题,其中用户在其服务中使用了EventEmitter,但是他在本评论中建议他 不要使用它,而是直接在他的服务中使用Observables.

我还阅读了这个 问题 ,解决方案建议将EventEmitter传递给子节点并订阅它.

我的问题是:我应该,还是不应该手动订阅EventEmitter?我该怎么用?

angular2-services angular

199
推荐指数
3
解决办法
19万
查看次数

如何在Angular 2中创建单件服务?

我已经读过,当引导应该让所有孩子共享相同的实例时注入,但我的主要和头部组件(主应用程序包括头部件和路由器出口)都获得了我的服务的单独实例.

我有一个FacebookService,用于调用facebook javascript api和一个使用FacebookService的UserService.这是我的引导程序:

bootstrap(MainAppComponent, [ROUTER_PROVIDERS, UserService, FacebookService]);
Run Code Online (Sandbox Code Playgroud)

从我的日志记录看起来,引导调用结束,然后我看到FacebookService然后在每个构造函数运行的代码,MainAppComponent,HeaderComponent和DefaultComponent之前创建UserService:

在此输入图像描述

typescript angular2-routing angular2-services angular

131
推荐指数
7
解决办法
12万
查看次数

Angular2:如何在渲染组件之前加载数据?

我试图在组件呈现之前从我的API加载一个事件.目前我正在使用我的API服务,我从组件的ngOnInit函数调用它.

我的EventRegister组件:

import {Component, OnInit, ElementRef} from "angular2/core";
import {ApiService} from "../../services/api.service";
import {EventModel} from '../../models/EventModel';
import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteParams, RouterLink} from 'angular2/router';
import {FORM_PROVIDERS, FORM_DIRECTIVES, Control} from 'angular2/common';

@Component({
    selector: "register",
    templateUrl: "/events/register"
    // provider array is added in parent component
})

export class EventRegister implements OnInit {
    eventId: string;
    ev: EventModel;

    constructor(private _apiService: ApiService, 
                        params: RouteParams) {
        this.eventId = params.get('id');
    }

    fetchEvent(): void {
        this._apiService.get.event(this.eventId).then(event => {
            this.ev = event;
            console.log(event); // Has a …
Run Code Online (Sandbox Code Playgroud)

typescript angular2-services angular2-http angular

122
推荐指数
3
解决办法
18万
查看次数

Angular 2 TypeScript如何在Array中查找元素

我有一个组件和服务:

零件:

export class WebUserProfileViewComponent {
    persons: Person [];
    personId: number;
    constructor( params: RouteParams, private personService: PersonService) {
          
        
           this.personId = params.get('id');
           this.persons =  this. personService.getPersons();
           console.log(this.personId);  
        }
}
Run Code Online (Sandbox Code Playgroud)

服务:

@Injectable()
export class PersonService {
      getPersons(){
        var persons: Person[] = [
            {id: 1, firstName:'Hans', lastName:'Mustermann', email: 'mustermann@test.com', company:'Test', country:'DE'},
            {id: 2, firstName:'Muster', lastName:'Mustermann', email: 'mustermann@test.com', company:'test', country:'DE'},
            {id:3, firstName:'Thomas', lastName:'Mustermann', email: 'mustermannt@tesrt.com', company:'test', country:'DE'}
        ];
          
        return persons;
      }
}
Run Code Online (Sandbox Code Playgroud)

我想获得带有Id('personID')的Person Item.我从Routeparam获得的personID.为此,我需要foreach循环?但我还没有找到解决方案.

提前致谢!

angular2-services angular

105
推荐指数
6
解决办法
29万
查看次数

如何检查Observable数组的长度

在我的Angular 2组件中,我有一个Observable数组

list$: Observable<any[]>;
Run Code Online (Sandbox Code Playgroud)

在我的模板中我有

<div *ngIf="list$.length==0">No records found.</div>

<div *ngIf="list$.length>0">
    <ul>
        <li *ngFor="let item of list$ | async">item.name</li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

但是对于Observable数组,列表$ .length不起作用.

更新:

似乎(列出$ | async)?. length给出了我们的长度但是下面的代码仍然不起作用:

<div>
    Length: {{(list$ | async)?.length}}
    <div *ngIf="(list$ | async)?.length>0">
        <ul>
            <li *ngFor="let item of (list$ | async)">
                {{item.firstName}}
            </li>
        </ul>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

任何人都可以指导我如何检查Observable数组的长度.

observable angular2-template angular2-services angular

89
推荐指数
4
解决办法
7万
查看次数

如何避免Angular 2中具有很长相对路径的导入?

如何引入'my-app-name/services'类似以下导入的行?

import {XyService} from '../../../services/validation/xy.service';
Run Code Online (Sandbox Code Playgroud)

typescript ecmascript-6 angular2-services angular

85
推荐指数
3
解决办法
3万
查看次数

Angular 2中EventEmitter.next()和EventEmitter.emit()之间的区别

EventEmitter.emit()和之间有什么区别EventEmitter.next()?两者都将事件分派给订阅的侦听器.

export class MyService {
  @Output() someEvent$: EventEmitter<any> = new EventEmitter();

  someFunc() {
   this.someEvent$.emit({myObj: true});

   this.someEvent$.next({myObj: true});
  }
}
Run Code Online (Sandbox Code Playgroud)

为EventEmitter documenation是此刻不那么有用.

angular2-services angular

81
推荐指数
2
解决办法
2万
查看次数

类型'Observable <Response>'上不存在属性'toPromise'

import { Headers, Http } from '@angular/http';

@Injectable()
export class PublisherService{

    private publishersUrl = 'app/publisher';

    constructor(private http: Http) { }

    getPublishers(): Promise<Publisher[]>{
        return this.http.get(this.publishersUrl)
                   .toPromise()
                   .then(response => response.json().data) 
                   .catch(this.handleError);
    }
}    
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

属性'toPromise'在'Observable'类型上不存在

rxjs typescript angular2-services angular

73
推荐指数
3
解决办法
5万
查看次数

如何在角度2中绑定HTML中组件的静态变量?

我想在HTML页面中使用组件的静态变量.如何将组件的静态变量与角度2中的HTML元素绑定?

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Rx';
@Component({
  moduleId: module.id,
  selector: 'url',
  templateUrl: 'url.component.html',
  styleUrls: ['url.component.css']
})
export class UrlComponent {

  static urlArray;
  constructor() {
  UrlComponent.urlArray=" Inside Contructor"
  }
}
Run Code Online (Sandbox Code Playgroud)
<div>
  url works!
   {{urlArray}}
</div >
Run Code Online (Sandbox Code Playgroud)

typescript angular2-services angular

61
推荐指数
3
解决办法
6万
查看次数