Я хочу создать пользовательский ng-if
но не могу найти хороших примеров того, как это должно быть сделано.
Я нацелен на то, что:
<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
будет выполнять эту функцию снова и снова.
<div ng-if="showText ? true : false">....</div>
но опять же, если ваш showText является логическим, он будет делать то же самое.
ng-if
, которая будет определять значениеtrue/false
какng-if="check()"
и тогда функцией будет$scope.check = function(){ return someText == 'something' }
toggle-if="mytogglename"
.