重用angularjs控制器中的功能

时间:2019-05-22 08:20:07

标签: javascript angularjs

我有一个显示交互式节点的树渲染器。这是这种互动的一部分:

<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传递给服务,但是a few people said则不应在服务中修改$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库来做到这一点吗?任何输入表示赞赏。

0 个答案:

没有答案