controllerAs在指令中,控制器中的函数不能看到一些变量

时间:2015-09-06 05:53:21

标签: angularjs

我有指令/控制器的定义。如果你看,有onClick函数定义。调用函数时,它可以看到this变量,ftConditionButton绑定directive,如onClick所述。问题是,conditionButtonController没有看到 angular .module('app') .directive('ftConditionButton', ftConditionButton); function ftConditionButton() { var directive = { restrict: 'A', scope: {}, require: ['ftConditionButton'], templateUrl: 'conditionButton.html', controller: ConditionButtonController, controllerAs: 'conditionButtonController', bindToController: { ftConditionButton: '&' } }; return directive; } function ConditionButtonController() { var conditionButtonController = this; conditionButtonController.onClick = onClick; //////////////// function onClick() { this.ftConditionButton; // this works conditionButtonController; // conditionButtonController is undefined } },这违反了我对JavaScript的理解。有人可以向我解释我错过了什么吗?现在它看起来像一个新的" Class"创建并获得了原始控制器的所有方法。



$client_ip




1 个答案:

答案 0 :(得分:0)

不确定你做错了什么。好像对我来说。

我可以推荐几件事:

1)确保您使用angularjs-1.4。

2)始终将所有内容都包装到本地函数中,这样您就不会在全局范围内公开任何内容。

(function() {
    angular.module('experiment', [])
           .controller('MyController', function($scope){
              $scope.test = function() {
                alert("Test!");  
              };
    });

    angular
        .module('experiment')
        .directive('ftConditionButton', ftConditionButton);

      function ftConditionButton() {
        var directive = {
          template: '<button ng-click="conditionButtonController.onClick()">Hello </button>',
          restrict: 'A',
          scope: {},
          bindToController: {
            ftConditionButton: '&'
          },
          controller: ConditionButtonController,
          controllerAs: 'conditionButtonController',
        };

        return directive;
      }

      function ConditionButtonController($scope) {
        var conditionButtonController = this;
        conditionButtonController.onClick = onClick;

        function onClick() {
          conditionButtonController.ftConditionButton();
        }
      }
})();

并查看:

<div ng-app="experiment">
  <div ng-controller="MyController">
      <div ft-condition-button="test()" />
  </div>
</div>

PS,下次使用JSFiddle来证明您的问题。