AngularJS指令仅在条件为真时

los*_*ket 2 angularjs angularjs-directive

我将在ng-repeat项目中有一个contextmenu指令.根据条件是否为真,应该应用该指令.如何仅在item.hasMenu == true时设置条件然后应用指令?

<ul ng-controller="ListViewCtrl" >
<li contextmenu ng-repeat="item in items">{{item.name}} </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

编辑

这似乎对我有用.首先是指令.

app.directive('menu',function(){

    return {
        restrict : 'A',

        link : function(scope,element,attrs){

            if(scope.hasMenu){
                        element.contextmenu({
                                        menu:[
                                        {title:"Remove" , "cmd" : "remove"},
                                        {title:"Add" , "cmd" : "add"},
                                        ],
                                        select:function(event,ui){
                                            //alert("select " + ui.cmd + " on" + ui.target.text());
                                            if (ui.cmd ==='remove'){
                                                alert('Remove selected on ' + scope.item);
                                            }
                                            if (ui.cmd ==='add'){
                                                alert("Add selected");
                                            }
                                        }
                        });
            }

        }
    }
    }
);
Run Code Online (Sandbox Code Playgroud)

然后是html

 <ul ng-controller="ListViewCtrl" >
<li menu  ng-repeat="item in items">{{item.name}} </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

Dav*_*yon 6

你可以用这样的东西ng-if吗?

<ul ng-controller="ListViewCtrl" >
   <li ng-repeat="item in items">
      <span>{{item.name}}</span>
      <div contextmenu ng-if="item.hasMenu"></div>
   </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

以下是ng-if的文档.

编辑:如果你正在上课的上下文菜单,你应该能够这样做:

<ul ng-controller="ListViewCtrl" >
   <li ng-class="{'hasmenu': item.hasMenu}" ng-repeat="item in items">{{item.name}} </li>
</ul>
Run Code Online (Sandbox Code Playgroud)