对于与Angular指令中的& -binding一起使用的属性,存在什么名称限制

时间:2014-07-30 19:38:48

标签: angularjs angularjs-directive

在下面的代码中,我使用属性 selected 进行从指令到其父控制器的回调。

我注意到当我将selected更改为setSelected或XXXSelected(前缀似乎并不重要)时,父控制器上的相应方法永远不会被调用,如注释中所述。

显然,这与我还不知道的其他一些概念相冲突,我认为我不能使用XXXSelected作为属性名称。那是对的吗?如果是这样,在命名方面还存在哪些其他限制?

('设置'在我的问题域中处于对象中,并不意味着是方法或设置者)

parent.html

<div ng-repeat="set in parentCtrl.sets">
    <my-directive set="set" selected="parentCtrl.setSelected(set)"></my-directive>
    <!-- this would not work: my-directive set="set" XXXSelected="parentCtrl.setSelected(set)"></my-directive -->
</div>

parent.controller.js

'use strict';

angular.module('app')
  .controller('ParentCtrl', function () {
this.setSelected = function(set) {

  // does not get called when replacing selected with XXXSelected
  console.log(set.someAttribute);
};

  });

set.html

<div ng-click="setCtrl.select()"> … </div>

set.directive.js

'use strict';

angular.module('app')
  .directive('myDirective', function () {

    function SetCtrl($scope) {

      this.select = function() {

        console.log($scope.selected); // reports: function(locals)
        $scope.selected({set: $scope.set});

        //console.log($scope.XXXSelected); // also reports: function(locals)
        //$scope.XXXSelected({set: $scope.set}); //would not get called
      }

    }

    return {

      templateUrl: 'set.html',
      restrict: 'E',
      controller: SetCtrl,
      controllerAs: 'setCtrl',
      scope: {
        selected: '&',
        //XXXSelected: '& // this would not work
      }

    };
  });

1 个答案:

答案 0 :(得分:0)

尝试使用:

<my-directive set="set" x-x-x-selected="parentCtrl.setSelected(set)"></my-directive>

带有-的HTML中的角度分割在JavaScript中有一个CamelCase。 因此,如果您将JS-Property命名为myAttributeLooksLikeThis,则可以在html中使用my-attribute-looks-like-this=""。这是由于HTML标签的不区分大小写。

您还可以在官方文档中了解有关指令here

的信息