我正在尝试根据用户是否登录(我的用户服务中的导出参数)更改Angular2中导航栏组件的行为。我刚设置isLoggedIn为此返回true。很遗憾,该链接不会显示为:
angular2.js:23730 EXCEPTION:在UserService上找不到指令注释
我在应用程序的其他地方使用UserService作为常规服务,我是否可以将其作为指令使用,而不会干扰其他任何功能?
nav.component.ts:
import { Component } from 'angular2/core';
import { RouteConfig, ROUTER_DIRECTIVES } from 'angular2/router';
import { UserService } from '../user/services/user.service';
@Component({
selector: 'nav-bar',
template: `
<div class="nav">
<a [routerLink]="['LoginComponent']" *ngIf="UserService.isLoggedIn">Login</a>
</div>
`,
styleUrls: ['client/dev/todo/styles/todo.css'],
directives: [ROUTER_DIRECTIVES, UserService],
providers: [ ]
})
export class NavComponent {}
user.service.ts
import { Injectable, Inject } from 'angular2/core';
import { Headers, Http } from 'angular2/http';
@Injectable()
export class UserService {
private loggedIn = false;
constructor(@Inject(Http) private _http: Http) {
this.loggedIn = !!localStorage.getItem('auth_token');
}
isLoggedIn() {
//return this.loggedIn;
return true;
}
}
另外,如果我将服务移动到提供者而不是指令,那么该组件根本不会显示,错误:
EXCEPTION:TypeError:无法读取属性&#39; isLoggedIn&#39;在NavComponent @ 2:41中的[UserService.isLoggedIn]中未定义
所以我似乎无法引用该属性?
答案 0 :(得分:1)
您已在directives
媒体资源中注入服务,因此需要@Component
或@Directive
。
directives: [ROUTER_DIRECTIVES, UserService], // <<< Not good! Remove it from there!
您必须注入providers
属性
providers : [UserService] /// Good!
修改强>
所以你的问题更像是我可以使用服务作为指令吗?,答案是否定的。您必须使用@Component
或@Directive
对您的服务进行注释,届时它将不再是一项简单的服务。