我使用通用启动器作为主干.
当我的客户端启动时,它会从localStorage读取有关用户信息的令牌.
@Injectable()
export class UserService {
foo() {}
bar() {}
loadCurrentUser() {
const token = localStorage.getItem('token');
// do other things
};
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是由于服务器渲染,我在服务器端(终端)得到了这个:
EXCEPTION:ReferenceError:未定义localStorage
我从ng-conf-2016-universal-patterns获得了这个想法,它使用依赖注入来解决这个问题.但那个演示真的很老了.
说我现在有这两个文件:
main.broswer.ts
export function ngApp() {
return bootstrap(App, [
// ...
UserService
]);
}
Run Code Online (Sandbox Code Playgroud)
main.node.ts
export function ngApp(req, res) {
const config: ExpressEngineConfig = {
// ...
providers: [
// ...
UserService
]
};
res.render('index', config);
}
Run Code Online (Sandbox Code Playgroud)
现在他们使用相同的UserService.有人可以提供一些代码来解释如何使用不同的依赖注入来解决这个问题吗?
如果有另一种更好的方式而不是依赖注入,那也很酷.
更新1我正在使用Angular 2 RC4,我尝试了@Martin的方式.但即使我导入它,它仍然在下面的终端给我错误:
终点站(npm开始)
/my-project/node_modules/@angular/core/src/di/reflective_provider.js:240 throw new reflector_exceptions_1.NoAnnotationError(typeOrFunc,params); …