У меня есть шаблон, в котором многие типы элементов "редактируются". Это означает, что у меня есть множество шаблонов (по одному для каждого редактируемого типа элемента), которые должны иметь уникальные поля, но общие функции (редактирование, сохранение, отмена редактирования, удаление и т. д.). Эти общие функции приводят к большому количеству повторений на контроллерах: save
, edit
, cancel
и т. д., а также к очень повторяющейся обработке ошибок.
Один из способов, который я рассматривал для решения этой проблемы, заключался в том, чтобы каждый контроллер «украшал» себя (используя службу), но это также приводило к беспорядку.
Я предпочитаю директиву, скажем, «редактируемую»:
<form name="editGroup" editable>
<div ng-show="editMode">
<!-- lots of fields, e.g. -->
<input type="text" ng-model="name"></input>
<span ng-show="editGroup.name.$error.required">The name is required</span>
<button type="submit" ng-click="save()">Save</button>
<button ng-click="cancel">Cancel</button>
</div>
<div ng-show="!editMode">
<!-- lots of text, e.g. -->
<span>{{name}}</span>
<button ng-click="edit()">Edit</button>
<button ng-click="delete()">Delete</button>
</div>
</form>
Проблема в том, что все модели поступают из области controller, поскольку они уникальны для этого шаблона, в то время как повторяющиеся элементы области, такие как функции save()
cancel()
edit()
delete()
, поступают из области действия директивы изолировать.
Я, ну, смешиваю прицелы, и, конечно же, я не могу знать заранее, какие предметы должны быть доступны. Итак, если я переведу с:
- изолировать область действия: я теряю доступ к моделям контроллеров в включенном элементе, а также к форме для проверки
- область действия контроллера (по умолчанию): я теряю доступ к добавленным функциям из директивы, что и было целью директивы в первую очередь!
Я делаю что-то неправильно здесь; как лучше (чище?) сделать это?
$scope.$parent.$save = function...
обновленную скрипту, чтобы отразить как унаследованную, так и изолированную область действия а> - person Rei Mavronicolas   schedule 04.01.2015