Есть ли простой способ расширить директиву атрибута в angularjs?

0

Я хочу создать пользовательский ng-if но не могу найти хороших примеров того, как это должно быть сделано.

Я нацелен на то, что:

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

Я хочу, чтобы это

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

где true|false зависит от someText. Есть простой способ сделать это?

  • 1
    почему бы вам не вызвать функцию над самой директивой ng-if , которая будет определять значение true/false как ng-if="check()" и тогда функцией будет $scope.check = function(){ return someText == 'something' }
  • 0
    Я хочу использовать его для переключения функций, поэтому я хочу более простой способ написать toggle-if="mytogglename" .
Показать ещё 6 комментариев
Теги:

2 ответа

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?
-2
<div ng-if="showText ? true : false">....</div>

но опять же, если ваш showText является логическим, он будет делать то же самое.

  • 1
    Ты даже не пытаешься ответить на мой вопрос.
  • 0
    вы говорите "где истина | ложь зависит от некоторого текста". Вы можете попытаться задать лучший вопрос.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню