使用controllerAs语法装饰angularJS指令控制器功能

时间:2017-03-29 10:27:30

标签: angularjs angularjs-directive decorator

我正在尝试使用$ 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(){}不起作用。

如何更改此功能的行为?

1 个答案:

答案 0 :(得分:0)

尝试这样的事情

var _baseFunction = scope.baseFunction;
function baseFunctionExtended() {
    _baseFunction.apply(this, arguments);
    console.log("yay, I'm modified one!");
}
scope.baseFunction = baseFunctionExtended;

如果不需要,可以调用原始函数,并添加更多内容。接下来的问题是如何实现这一目标。我想尝试扩展上面的链接功能。