用例如下:我们希望根据用户的权限隐藏或显示元素。
理想的方式是这样的:
<div if.bind="foo != bar && hasPermission('SOME_PERMISSION')"></div>
在这种情况下, hasPermission()
是一个自动注入所有视图模型的函数。
这可能吗?我知道我们可以使用基类,但我们希望尽可能保持灵活性。
答案 0 :(得分:2)
如果您愿意支付全局函数的价格(import org.springframework.stereotype.*
import org.springframework.beans.factory.annotation.*
@Component
public class MyBean {
@Value("${name}")
private String name;
// ...
}
中的全局函数),window
它在您的app-bootstrap文件中,如下所示:
import
export function hasPermission(permission) {
return permission.id in user.permissions; // for example...
}
如果您想要全局发布的服务是一个视图,您可以回避在import 'has-permission';
export function configure(aurelia) {
// some bootstrapping code...
}
上公开它并告诉Aurelia的DI使其在任何地方都可用,这样您就不必申报它在每个依赖客户端。
为此,请在FrameworkConfiguration#globalResources()
配置功能中传递其模块ID:
window
答案 1 :(得分:1)
如果您拥有处理用户权限的服务,则可以将其注入所有视图模型中。
export class UserPermissionService
{
hasPermission(user, permission)
{
return false;
}
}
@inject(UserPermissionService)
export class Users {
userPermissionService;
constructor(userPermissionService) {
this.userPermissionService = userPermissionService;
...
}
hasPermission(user, p)
{
return this.userPermissionService.hasPermission(user, p);
}
}
如果您仍然不喜欢这样,其他选项包括:
值转换器http://aurelia.io/docs.html#/aurelia/binding/1.0.0-beta.1.2.1/doc/article/binding-value-converters
自定义属性(类似于if
它会隐藏元素)
http://www.foursails.co/blog/custom-attributes-part-1/
根据您的需要,两者都可以使用上面的UserPermissionService单例
答案 2 :(得分:-1)
使用导出功能在文件夹中添加.js文件 例如:utility.js
export function hasPermission(permission) {
return true/false;
};
在视图模型中导入函数
import {hasPermission} from 'utility';
export class MyClass{
constructor(){
this.hasPermission = hasPermission;
}
}
view.html
<div if.bind="foo != bar && hasPermission('SOME_PERMISSION')"></div>