我正在使用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