Комплексная директива поиска Angularjs с диалогом [duplicate]

Виртуальное ключевое слово для деструктора необходимо, когда вы хотите, чтобы разные деструкторы должны следовать правильному порядку, в то время как объекты удаляются с помощью указателя базового класса. например:

Base *myObj = new Derived();
// Some code which is using myObj object
myObj->fun();
//Now delete the object
delete myObj ; 

Если деструктор производного класса является виртуальным, объекты будут уничтожены в порядке (сначала производный объект, затем базовый). Если деструктор производного класса НЕ является виртуальным, то только объект базового класса будет удален (поскольку указатель имеет базовый класс «Base * myObj»). Таким образом, будет происходить утечка памяти для производного объекта.

2
задан georgeawg 9 July 2018 в 15:35
поделиться

1 ответ

Внедрение настраиваемых элементов формы (с помощью ngModel)

Используйте контроллер ngModel и объектную форму свойства require в DDO:

angular.module('myModule', [])
.directive('myDirective', function() {
  return {
    restrict: 'E',
    require: { ngModelCtrl: 'ngModel' },
    scope: {
      ngModel: '<'
    },
    bindToController: true,
    controllerAs: '$ctrl',
    template: 
       `<div>
          <button ng-click="$ctrl.ngModelCtrl.$setViewValue('foo')">
              Set foo
          </button>
          <button ng-click="$ctrl.ngModelCtrl.$setViewValue('bar')">
              Set bar
          </button>
       </div>`,
    controller: function ctrl() {}
  };
});

Использование:

<form name="myForm">
    <input type="text" ng-model="foobar">
    <my-directive ng-model="foobar"></my-directive>
</form>

Создав экземпляр и используя контроллер ng-model , директива автоматически установит элементы управления формы как необходимо.

DEMO

angular.module('myModule', [])
.directive('myDirective', function() {
  return {
    restrict: 'E',
    require: { ngModelCtrl: 'ngModel' },
    scope: {
      ngModel: '<'
    },
    bindToController: true,
    controllerAs: '$ctrl',
    template: 
       `<div>
          <button ng-click="$ctrl.ngModelCtrl.$setViewValue('foo')">
              Set foo
          </button>
          <button ng-click="$ctrl.ngModelCtrl.$setViewValue('bar')">
              Set bar
          </button>
       </div>`,
    controller: function ctrl() {}
  };
});
<script src="//unpkg.com/angular/angular.js"></script>
  <body ng-app="myModule">
    <h2>ngModel DEMO</h2>
    <form name="myForm">
        <input type="text" ng-model="foobar">
        <my-directive ng-model="foobar"></my-directive>
    </form>
    <br>myForm.$dirty = {{myForm.$dirty}}
    <br>myForm.$pristine = {{myForm.$pristine}}
    <br><button ng-click="myForm.$setDirty()">Set dirty</button>
    <br><button ng-click="myForm.$setPristine()">Set pristine</button>
  </body>

Я рекомендую выделить область с помощью ngModel как вход. Вывод должен выполняться с помощью метода $ setViewValue .

Для получения дополнительной информации см.

3
ответ дан georgeawg 15 August 2018 в 23:57
поделиться
  • 1
    Я создаю директиву и надеялся избежать повторения кода. – clearpath 3 July 2017 в 08:25
  • 2
    Проработал очень хорошо. Недостающей частью информации для меня был синтаксис bindToController, поскольку все примеры указывают на функцию ссылок как способ использования других контроллеров. Кроме того, scope: { ngModel: '<' } пригодится;) – clearpath 3 August 2017 в 08:20
Другие вопросы по тегам:

Похожие вопросы: