AngularJS 1.6中的方法多态/继承

时间:2017-09-17 19:30:50

标签: javascript angularjs

我在控制器覆盖AngularJS时遇到问题。

问题出现了:

    function UiCoreController($scope, ...) {
        'use strict';

        angular.extend(vm, {
            validatePremium: validatePremium
    }

        function validatePremium() {
            console.log('validate premium in core controller');
            // validation logic 
            vm.calculatePremium();
        }

        function calculatePremium() { ... }
    }

function UiAskController($rootScope, $scope, $controller) {
    'use strict';

    var vm = this;
    var core = $controller('UiCoreController', { $scope: $scope });

    angular.extend(this, core);

    angular.extend(vm, {
      ...
    }
    function calculatePremium() { ... }
}

当我从模板(validatePremium()指令)调用ng-change方法时 - 从UiCoreController调用它,但calculatePremium()不会被更具描述性的{{1}调用}。

仅当将整个UiAskController::calculatePremium()方法复制粘贴到validatePremium()时才有效,但在我看来,它似乎是代码重复。

有人会帮助我在类似Java的代码中调用UiAskController吗?

1 个答案:

答案 0 :(得分:1)

Javascript不像Java那样是OOP,因此没有多态和继承。所以简短的回答是没有。仅使用控制器无法实现您想要的效果。函数calculatePremium绑定到控制器范围,并且您确定不想在控制器之间共享范围。

您可以将此方法写入$rootScope,但这不是一种好的做法

我会将vm.calculatePremium()逻辑投入使用。它是制作这种东西的合适场所。

请记住,控制器的主要用途是将数据绑定到DOM a.e.使用范围渲染视图。

由于Service是一个单例,所以您可以在服务中执行所有数据操作,以避免代码重复并简化代码维护