保护Angular 2组件/路由的常用建议方法似乎是使用text_content()
,如下所示:
http://youknowriad.github.io/angular2-cookbooks/stateless-authentication.html
如果你只有几个组件,这可以正常工作,但有没有更好的方法可以集中所有这些?
每个组件的公共基类是否有效? (有关如何执行此操作的任何示例?)。我们可以使用自定义from lxml.html import fromstring
data = """
<tr>
<td>a</td>
<td>a</td>
<td>b</td>
<td></td>
<td>b</td>
</tr>"""
tree = fromstring(data)
for td in tree.xpath(".//td"):
print(td.text_content())
,例如a
a
b
b
吗? (实施例?)
我基本上试图阻止为每个组件复制+粘贴相同的@CanActivate()
代码。
(道歉,如果这些问题没有意义,仍在学习Angular)
由于
答案 0 :(得分:5)
您可以创建一个可以传递给@CanActivate
装饰器的全局回调:
export function isAllowed(): boolean | Promise<boolean>{
// Permission logic here
}
然后你可以将该函数传递给装饰器
@Component({...})
@CanActivate(isAllowed)
export class MyComponent{
}
这将为您提供验证权限的全局来源,但仍使用内置方法。
<强>更新强>
这是未经测试但可能适用于将服务注入isAllowed
在文档中,我发现bootstrap
方法返回ComponentRef
,其injector
属性在文档中有以下注释
注入器提供了DynamicComponentLoader。
这可能是获取应用程序的主注入器使用的相同单例实例的黄金票。理论上这应该有效
在您的启动文件中
export var applicationInjector: Injector;
bootstrap(AppComponent, [MyService, ...]).then((ref: ComponentRef) => {
applicationInjector = ref.injector;
});
然后在带有isAllowed方法的文件中
import {applicationInjector} from '...';
export function isAllowed(): boolean | Promise<boolean>{
let myService: MyService = applicationInjector.get(MyService);
return myService.isAllowed();
}