我想定制ng-if
,但找不到应该如何完成的任何好例子。有没有简单的方法来扩展angularjs中的属性指令?
什么我的目标是:
<div my-if="someText">....</div>
我想,要扩大到
<div ng-if="true|false">....</div>
其中true|false
取决于someText
。是否有捷径可寻?
我想定制ng-if
,但找不到应该如何完成的任何好例子。有没有简单的方法来扩展angularjs中的属性指令?
什么我的目标是:
<div my-if="someText">....</div>
我想,要扩大到
<div ng-if="true|false">....</div>
其中true|false
取决于someText
。是否有捷径可寻?
要用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
的调用将一次又一次地执行此功能。
做得很好......你有没有在ng-repeat中测试过它? – malix
<div ng-if="showText ? true : false">....</div>
但是如果你的showText是一个布尔值,它会做同样的事情。
你甚至不想回答我的问题。 –
你在说“where true | false取决于someText”。你也可以尝试更好的问题。 –
我想我说得很清楚。根据提供给我的指令的值,我希望将其扩展为对应于该值的'ng-if'。 –
为什么不通过'ng-if'指令本身调用一个函数,它会像'ng-if =“check()''一样决定值'true/false',然后函数就是'$ scope。 check = function(){return someText =='something'}' –
我想将它用于功能切换,所以我想要一个简单的方法来写'toggle-if =“mytogglename”'。 –
ng-if很难扩展/重用... ng-show更容易,因为你可以使用display:none并且自己打开... – malix