我在控制器覆盖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
吗?
答案 0 :(得分:1)
Javascript不像Java那样是OOP,因此没有多态和继承。所以简短的回答是没有。仅使用控制器无法实现您想要的效果。函数calculatePremium
绑定到控制器范围,并且您确定不想在控制器之间共享范围。
您可以将此方法写入$rootScope
,但这不是一种好的做法
我会将vm.calculatePremium()
逻辑投入使用。它是制作这种东西的合适场所。
请记住,控制器的主要用途是将数据绑定到DOM a.e.使用范围渲染视图。
由于Service
是一个单例,所以您可以在服务中执行所有数据操作,以避免代码重复并简化代码维护