我正在使用Angular 1.4.8,并试图扩展控制器。原始控制器和扩展控制器都非常相似,但是我想在扩展控制器中重写一个函数。使用angular.extend()控制器和覆盖功能
angular.module('app').controller('ControllerOne', function() {
var vm = this;
vm.data = {};
vm.callSayHello = function() {
vm.sayHello();
}
vm.sayHello = function() {
console.log('Hello from ControllerOne.');
}
});
angular.module('app').controller('ControllerTwo', ['$scope', function($scope) {
angular.extend(vm, $controller('OrdersAddController', { $scope: $scope }));
// I do not want to override vm.callSayHello(), so I don't redeclare that function.
// This is what I want to override.
vm.sayHello = function() {
console.log('Hello from ControllerTwo.');
// Some other extra handling.
}
}]);
<button type="button" ng-click="ctrl.callSayHello()">Click Me</button>
它看起来像我可以在ControllerTwo
覆盖ControllerOne
功能。但是对于这种特殊情况,我想覆盖的函数vm.sayHello()
不是直接从类似点击的事件中调用,而是由另一个函数vm.callSayHello()
调用。
那么会发生什么情况是,当vm.callSayHello()
从任一ControllerOne
或ControllerTwo
,这也叫vm.sayHello()
,但尽管ControllerTwo
被重新声明它总是呼吁ControllerOne
函数调用。
希望这是有道理的。但有没有办法可以覆盖函数ControllerTwo
?
谢谢您的回答。我已经读过,人们通常不会推荐扩展控制器,但它们的功能非常接近,以至于我希望有一种可接受的方式。 – kenshin9