2016-03-22 43 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'。 –

相關問題