我正在尝试使用$ provide.decorator更改特定供应商指令的行为。
base指令看起来像这样:
angular
.module('vendor.module')
.controller('vendorCtrl', [$scope, function($scope) {
var vm = this;
vm.baseFunction = function() {
//code I want to replace
}
}])
.directive('vendorDir', function() {
return {
restrict: 'E',
controller: 'vendorCtrl as vm',
scope: {
stuff: '='
},
bindToController: true
}
}
// and this is my decorator
angular
.module('vendor.module')
.config(function($provide) {
$provide.decorator('vendorDirDirective', function($delegate) {
var directive;
directive = $delegate[0];
// how to override vm.baseFunction ?
return $delegate;
});
}
我的代码在另一个指令启动时成功运行,但我不确定如何替换控制器内部的函数。尝试$ scope.baseFunction = function(){}不起作用。
如何更改此功能的行为?
答案 0 :(得分:0)
尝试这样的事情
var _baseFunction = scope.baseFunction;
function baseFunctionExtended() {
_baseFunction.apply(this, arguments);
console.log("yay, I'm modified one!");
}
scope.baseFunction = baseFunctionExtended;
如果不需要,可以调用原始函数,并添加更多内容。接下来的问题是如何实现这一目标。我想尝试扩展上面的链接功能。