2016-03-22 40 views
0

我想定制ng-if,但找不到应该如何完成的任何好例子。有没有简单的方法来扩展angularjs中的属性指令?

什么我的目标是:

<div my-if="someText">....</div> 

我想,要扩大到

<div ng-if="true|false">....</div> 

其中true|false取决于someText。是否有捷径可寻?

+1

为什么不通过'ng-if'指令本身调用一个函数,它会像'ng-if =“check()''一样决定值'true/false',然后函数就是'$ scope。 check = function(){return someText =='something'}' –

+0

我想将它用于功能切换,所以我想要一个简单的方法来写'toggle-if =“mytogglename”'。 –

+0

ng-if很难扩展/重用... ng-show更容易,因为你可以使用display:none并且自己打开... – malix

回答

1

要用ng-if代替指令,需要重新编译。我得到它的工作最简单的方法是这样的:

(function() { 
    angular.module('enheter').directive('toggleIf',['$compile', function($compile) { 
      return { 
       restrict: 'A', 
       compile: function(el,attr) { 
        var toggleName = attr.toggleIf; 
        var toggleOn = toggleName === "sometext"; 
        el.attr('ng-if', toggleOn); 
        el.removeAttr('toggle-if'); 
        var fn = $compile(el); 
        return function(scope) { 
         fn(scope); 
        }; 
       } 
      }; 
     }]); 
})(); 

该指令上面首先得到toggleIf属性的值。定义toggleOn的值的部分将更加复杂,但这显示了我的目标。然后,我只需将ng-if添加到该元素并删除toggle-if。如果toggle-if未被移除,则会有无限循环,因为对$compile的调用将一次又一次地执行此功能。

+0

做得很好......你有没有在ng-repeat中测试过它? – malix

-1
<div ng-if="showText ? true : false">....</div> 

但是如果你的showText是一个布尔值,它会做同样的事情。

+1

你甚至不想回答我的问题。 –

+0

你在说“where true | false取决于someText”。你也可以尝试更好的问题。 –

+0

我想我说得很清楚。根据提供给我的指令的值,我希望将其扩展为对应于该值的'ng-if'。 –

相关问题