Повторное использование функциональности в контроллерах angularjs - PullRequest
0 голосов
/ 22 мая 2019

У меня есть средство визуализации дерева, которое отображает интерактивные узлы.Вот фрагмент такого взаимодействия:

<div class="col-sm-10 pull-left box-content" ng-click="loadEdit(node)">
    <div data-ng-if="!showEdit(node)" data-ng-include="formTemplates.display"></div>
    <div data-ng-if="showEdit(node)" data-ng-include="formTemplates.edit"></div>
</div>

Функции showEdit(node) и loadEdit(node) определяются из контроллера.Теперь мне нужно иметь несколько страниц с разной логикой - мне нужны разные контроллеры, каждый из которых имеет свои собственные showEdit(node) и несколько других специализированных функций, но я хотел бы повторно использовать функцию loadEdit(node) и многие другие, потому что они определенно являются общими функциями.

Вот вышеупомянутое loadEdit(node):

$scope.loadEdit = function(node) {
    if ($scope.selectedNode != undefined) {
        $scope.selectedNode.showEdit = false
    }
    node.showEdit = true;
    $scope.selectedNode = node;
}

Общий ответ на повторное использование функциональности заключается в создании службы, поэтому я собирался передать $scope службе, но несколько человек сказали , что вы не должны изменять $scope в сервисе (я был бы рад, если бы кто-нибудь уточнил, почему я не должен этого делать).Кроме того, все эти функции невероятно мелкие, и добавление слоя косвенности и написание набора определений, подобных этим $scope.loadEdit = function(node) {return service.loadEdit(node, $scope.selectedNode);}, даже не решит проблему - если бы я захотел также изменить другую переменную, мне пришлось бы добавить ее вкаждый контроллер, который использует эту сервисную функцию (и тот факт, что javascript не заботится о количестве передаваемых аргументов, делает такую ​​задачу очень легко забываемой)

Возможно, существует какой-то способ упаковки этих общих функций в объекти добавить их к каждому контроллеру, как это?Хотя я не знаю, как распределить это object на контроллеры:

angular.extend({}, FooCtrl, commonFunctionsObject);
angular.extend({}, BarCtrl, commonFunctionsObject);
angular.extend({}, BazCtrl, commonFunctionsObject);
...

Может быть, вы можете сделать это с библиотекой javascript, возможно?Любой вклад приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...