我有一个服务,通过HTTP服务获取数据并返回一个可观察对象.
在第一次调用之后,我想在服务内部缓存结果,一旦新组件尝试获取数据,它将从缓存结果中获取它.
有一个简单的解决方案吗?
我试图在成功完成Promise之后返回一个observable,但该函数没有返回Observable.要特定于代码,我想从存储中获取auth令牌(返回promise),然后在获取数据之后,然后生成对Api的Post请求(返回Observable).通过这样做,sublime文本在函数上给出了一个错误,"声明类型既不是'void'也不是'any'的函数必须返回一个值"下面是我的代码,
logout() : Observable<any>{
this.userData.getAuthToken().then((token)=>{
this.token = token;
this.headers = new Headers ({
"X-USER-TOKEN": token
});
this.options = new RequestOptions ({
headers: this.headers
});
var logout_url = "Api logout method";
return this.http.post(logout_url,{},this.options)
.map (res => res.json())
});
}
Run Code Online (Sandbox Code Playgroud)
如果我只是做一个帖子请求,那么它会像这样返回
return this.http.post(logout_url,{},this.options)
.map (res => res.json())
Run Code Online (Sandbox Code Playgroud)
但是当我尝试获取数据时,它不会从此发布请求中返回值.任何帮助都感激不尽!提前致谢
/app
- app.component.ts
- app.component.html (hide/show: menu bar)
- app.global.service.ts (Public varible LoginSuccess:boolean)
- main.ts
/student
- student.ts
- student.service.ts
- student.component.ts
- student.component.html
/security
- login.component.ts (LoginSuccess = true)
- login.component.html
Run Code Online (Sandbox Code Playgroud)
在我的Angular2应用程序中,我有一个简单的需求,我想根据登录成功显示隐藏菜单栏.为此,我创建了一个只有LoginSuccess布尔[hidden]=LoginSuccess变量的服务,我将在登录组件上设置它,并将在app.component.html上用于nav标签.
我现在面临的问题是,即使注射后app.global.service.ts通constructor的app.component.ts & login.component.ts价值不是持久的,并且每个构造函数创建的新对象app.global.service.ts.
问题:如何通过服务在应用程序中保持单个值.在Angular2文档的某个地方,我确实读到了Injectable服务是单例.
useExisting提供者的用途是什么?
难道useExistingOrThrowIfThereIsNone还是useExistingOrCreateIfThereIsNone?根据我们的需要,可以某种方式有目的地选择其中一种行为吗?如果其中一个不受支持,是否可以模拟不受支持的一个?
文档完全不清楚,只是给出了一个useExisting可以重用实例的例子useClass.
我是从https://angular.io/docs/ts/latest/guide/router.html关注此示例的
我也试图用服务做类似的列表,但是当我写这行时有些原因
servingpatients = Patient[];
Run Code Online (Sandbox Code Playgroud)
在我的组件中,我收到此错误,如果我删除它,该事情有效.不知道这样做会在样本中做些什么.控制台错误:
未捕获的SyntaxError:意外的令牌]
类型编译期间的终端错误
app/dashboard/dashboard.component.ts(35,27):错误TS1109:预期的表达式
dashboard.component.ts
import {Component, OnInit} from 'angular2/core';
import {Patient, DashboardService} from './dashboard.service';
import {Router} from 'angular2/router';
export class DashboardComponent implements OnInit{
servingpatients = Patient[];
constructor(private _service : DashboardService,
private _router: Router){}
ngOnInit(){
this._service.getServingPatients().then(servingpatients => this.servingpatients = servingpatients)
}
}
Run Code Online (Sandbox Code Playgroud) 好吧,这是我第一天使用打字稿做一些Angular 2,我试着做一个简单的getter和setter服务.
import {Injectable} from "angular2/core";
@Injectable()
export class TodoService {
private _todos:Array = [];
get todos():Array {
return this._todos;
}
set todos(value:Array) {
this._todos = value;
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么Typescript编译器抛出以下错误,因为我认为它应该没问题.
ERROR in [default] /Users/testguy/WebstormProjects/angular2-seed/src/app/services/todo-service.ts:6:17
Generic type 'Array<T>' requires 1 type argument(s).
ERROR in [default] /Users/testguy/WebstormProjects/angular2-seed/src/app/services/todo-service.ts:8:14
Generic type 'Array<T>' requires 1 type argument(s).
ERROR in [default] /Users/testguy/WebstormProjects/angular2-seed/src/app/services/todo-service.ts:12:18
Generic type 'Array<T>' requires 1 type argument(s).
Run Code Online (Sandbox Code Playgroud) 在我的Angular2应用程序中,我正在尝试使用HTTP在引导程序中从后端加载配置,以便我可以使用提取的数据来创建角度服务.
每当我尝试读取保存在我的Config中的HTTP响应时,我总是得到TypeError:无法读取未定义错误的属性'url'.
看起来HTTP请求仅在整个引导程序方法完成时才完成,而我的代码尝试在检索之前提取Observable响应.
如何修复它以从服务器中提取配置并使用它在启动时创建角度服务?(我想在提取数据的提供者中创建服务)
如果在启动时有更好的方法从服务器中提取配置,请发表评论.
我的main.ts看起来像这样:
bootstrap(AppComponent,
[APP_ROUTER_PROVIDERS, HTTP_PROVIDERS, ConfigurationService, Config])
.catch(err => console.error(err)
);
Run Code Online (Sandbox Code Playgroud)
configuration.service.ts
@Injectable()
export class ConfigurationService {
constructor(private http: Http) {
}
load() {
return this.http.get('config/getConfig').map(response => response.json());
}
}
Run Code Online (Sandbox Code Playgroud)
config.ts
@Injectable()
export class Config {
public config;
constructor(public configurationService: ConfigurationService) {
configurationService.load().subscribe(
config => this.config = config,
error => console.error('Error: ' + error)
);
}
get(key: any) {
return this.config[key];
}
}
Run Code Online (Sandbox Code Playgroud)
app.component.ts
@Component({
selector: 'app',
templateUrl: 'app/app.component.html',
styleUrls: …Run Code Online (Sandbox Code Playgroud) Angular2 rc.6
在json数据上运行循环时出现以下错误
core.umd.js:5995 EXCEPTION:app/modules/mbs/components/menu.html:5:4引起的错误:无法找到'object'类型的不同支持对象'[object Object]'.NgFor仅支持绑定到诸如Arrays之类的Iterables.
我的html循环,注意:我只是想在响应中迭代属性和数组.
<li *ngFor="let item of menuItems">
{{item}}
</li>
Run Code Online (Sandbox Code Playgroud)
我的服务方法
getMenuItems():Promise<any>{
return this.http.get('api/menu').toPromise().
then(response => response.json())
.catch(this.handleError)
}
Run Code Online (Sandbox Code Playgroud)
以下是我的json回复
{ "text": "Menu", "children": [ { "text": "Home", "url": "/spatt-web/home" }, { "text": "Configure", "children": [ { "text": "Tri-Party Program", "children": [ { "text": "Margins and Filters", "url": "/sp-rrp/config/operation" }, { "text": "Fields and Desirability", "url": "/spatt-rrp/config/program" } ] }, { "text": "Shared Settings", "url": "/shared-config/config" }, { "text": "SOMA Limits", "url": "/outright-config/config" } …Run Code Online (Sandbox Code Playgroud) 我一直在使用Angular 2文档中的Heroes教程进行实验.但是,我已经明白我不明白这个错误发生了什么:
Uncaught (in promise): TypeError: Cannot read property 'query' of null在browser_adapter.ts:88.
涉及的两件是HeroDetailComponent和HeroService.
import { Component, OnInit } from '@angular/core';
import { RouteParams } from '@angular/router-deprecated';
import { Hero, HeroService } from '../index';
@Component({
selector: 'my-hero-detail',
templateUrl: ...
styleUrls: [...]
})
export class HeroDetailComponent implements OnInit {
hero: Hero;
// TEMPORARY FIX:
_heroService = new HeroService(); // Avoids injection
// constructor(private _heroService: HeroService,
// private _routeParams: RouteParams) {}
constructor(private _routeParams: RouteParams) {}
ngOnInit() …Run Code Online (Sandbox Code Playgroud) 我们安装角火力基地
npm install firebase angularfire2 --save
Run Code Online (Sandbox Code Playgroud)
而且这个错误发生了
ERROR in node_modules/angularfire2/firebase.app.module.d.ts(10,22): error TS2420: Class 'FirebaseApp' incorrectly implements interface 'FirebaseApp'.
Property 'automaticDataCollectionEnabled' is missing in type 'FirebaseApp'.
Run Code Online (Sandbox Code Playgroud)
我怎么解决呢?