Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:如何创建一个连接现有指令的新指令?_Angularjs_Angularjs Directive - Fatal编程技术网

AngularJS:如何创建一个连接现有指令的新指令?

AngularJS:如何创建一个连接现有指令的新指令?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我想改进我目前的解决方案 我有一个使用和标签的大菜单。我只需要向用户显示他们有权访问的标记 我使用两个指令解决了这个问题:ng init和ng show ... <li ng-init="ok=hasPemission('item1')" ng-show="ok"> <a href="#/Item1">Item 1</a> </li> ... 因此,我的html更改为: ... <li my-permission-show="item1

我想改进我目前的解决方案

我有一个使用
  • 标签的大菜单。我只需要向用户显示他们有权访问的
  • 标记

    我使用两个指令解决了这个问题:ng init和ng show

    ...
    <li ng-init="ok=hasPemission('item1')" ng-show="ok">
      <a href="#/Item1">Item 1</a>
    </li>
    ...
    
    因此,我的html更改为:

    ...
    <li my-permission-show="item1">
      <a href="#/Item1">Item 1</a>
    </li>
    <li my-permission-show="item2">
      <a href="#/Item2">Item 2</a>
    </li>
    ...
    

    为什么控制器上没有一个名为hasPermission的属性,初始化为false。当您的承诺得到解决时,可以更新此值。那么您所需要的就是ng show='hasPermission'-ng init不是必需的。@GruffBunny,我有多个菜单项。每个都有自己的“resourceName”值(“item1”、“item2”)。为此,我需要在MenuController上解析一个包含所有resourceName的大数组。我更喜欢定义所有resourceName和li标签,而不是controller.imho模型是angular应用程序最重要的部分。一旦你有了模型,angular就更容易使用了。@grufbunny,首先感谢你的评论。我需要检查我是否理解您的第一个建议解决方案:我不能只使用ng show='hasPermission',因为我有很多权限要检查。因此,我需要使用ng show=“hasPermission('NameOfPermission')”或ng show=“hasPermission['NameOfPermission']”或ng show=“hasPermission.NameOfPermission”。好吗?正确-如果您有任何建议,例如hasPermissionTo.ViewAccounts、hasPermissionTo.EditAccounts等,都会显得非常优雅。
    ...
    <li my-permission-show="item1">
      <a href="#/Item1">Item 1</a>
    </li>
    <li my-permission-show="item2">
      <a href="#/Item2">Item 2</a>
    </li>
    ...
    
    !!!NOT WORKING CODE!!!
    .directive('myPermissionShow',['AccessControl',
     function (AccessControl) {
      return {
       restrict:'A',
       replaceAttribute: true, /* this property does not exists... */
       template: 'ng-init="val=hasPermission(user,resourceName)" ng-show="val"',
         scope: {
          resourceName: '@myPermissionShow'
         },
         controller: function ($scope, $element) {
           $scope.hasPemission = AccessControl.hasPermission;
           $scope.user = AccessControl.getLoggedUser();
         }
      }
    }])
    !!!NOT WORKING CODE!!!