注意:我在lodash下提交了这个问题,因为我很确定它可以帮助我很好地解决这个问题,但是现在还没有把它放在它上面
我有一个描述不同用户角色及其权限的对象;
我会像"这样"定义10-15个角色(这不反映应用程序代码,但问题本身):
var role1 = {
views: {
v1: {access: true},
v2: {access: false},
v#: {access: false}
}
}
var role2 = {
views: {
v1: {access: false},
v2: {access: true},
v3: {access: true},
}
}
Run Code Online (Sandbox Code Playgroud)
连接的用户将具有多个角色; 在那个例子中它可能是['role1', 'role2'],并且我需要构造一个单独的permissions对象,它将是所有用户角色中定义的所有道具的组合.
它基本上是基于白名单的,其中所有"真实"属性应该覆盖任何被定义为false的属性.因此,预期结果应该是:
permissions = {
views: {
v1: {access: true},
v2: {access: true},
v2: {access: true}
}
}
Run Code Online (Sandbox Code Playgroud)
我不太确定如何在不依赖疯狂的嵌套循环的情况下解决这个问题
这是JSBin的一个起点:http://jsbin.com/usaQejOJ/1/edit?js,console
谢谢你的帮助!
简而言之,这个想法是通过不必手动添加ng-class={'has-error': 'formName.inputName.$invalid'}每一个来简化模板form-group
所以我想创建一个指令,生成一个将添加到模板元素的字符串.该字符串是ng-class带表达式的属性
我认为创建一个在编译阶段添加ng-class属性的快速指令就足够了,但它似乎没有削减它.
{
restrict: 'C',
compile: function(tElement, tAttrs) {
var $elem = angular.element(tElement),
formName = $elem.parents('[ng-form]').length ? $elem.parents('[ng-form]').attr('ng-form') : $elem.parents('form').attr('name'),
controlName = $elem.find('.form-control').attr('name');
$elem.attr('ng-class', '{"has-error": ' + formName + '.' + controlName + '.$invalid}');
console.log('added ng-class attr', $elem.attr('ng-class'));
}
}
Run Code Online (Sandbox Code Playgroud)
看到控制台
第1个动态添加
form-group了ng-class属性.
与之关联的表达式是正确的
但该ng-class指令永远不会执行第二个在模板中手动添加
form-group其ng-class属性,并且可以正常工作
-
我在这里错过了什么?
我正在创建一个@Log()Decorator函数用于调试目的;
我希望Decorator将其中的一些逻辑委托给LoggingService依赖于应用程序中的其他服务...
我一直在尝试很多不同的东西,最简单/最直接的方法是将Main(或Shared)模块的Injector缓存为模块本身的静态prop(参见下面链接的StackBlitz示例),这对于懒惰 - 已加载的模块,但不适用于急切加载的模块......
非工作poc:https://stackblitz.com/edit/angular-j1bpvx ? file = app%2Fdecorator.ts
有没有办法在那里使用那个服务?
谢谢!
javascript dependency-injection decorator typescript angular