是否可以为Aurelia中的所有视图提供功能或类?

时间:2016-03-09 10:40:04

标签: aurelia

用例如下:我们希望根据用户的权限隐藏或显示元素。

理想的方式是这样的:

<div if.bind="foo != bar && hasPermission('SOME_PERMISSION')"></div>
在这种情况下,

hasPermission()是一个自动注入所有视图模型的函数。

这可能吗?我知道我们可以使用基类,但我们希望尽可能保持灵活性。

3 个答案:

答案 0 :(得分:2)

如果您愿意支付全局函数的价格(import org.springframework.stereotype.* import org.springframework.beans.factory.annotation.* @Component public class MyBean { @Value("${name}") private String name; // ... } 中的全局函数),window它在您的app-bootstrap文件中,如下所示:

具有-permission.js

import

main.js

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);
  }
}

如果您仍然不喜欢这样,其他选项包括:

根据您的需要,两者都可以使用上面的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>