4

我有一个非常奇怪的现象,即指令和隔离范围,范围内的属性工作或不工作取决于属性的命名。如果我使用

{check:'@check'}

它工作得很好,正如预期的那样。但是,如果我使用:

{checkN:'@checkN'}

定义的函数永远不会被分配。一个示例如下所示:

HTML:

<item ng-repeat="list_item in model.list" model="list_item" checkN="checkName()" check="checkName()" position="$index"></item>'

Javascript

app.directive('item', function(){
   return {
      restrict: 'E',
      replace : false,   
      scope:{
              $index: '=position',
              check: '&check',
              checkN: '&checkN',
              model:'='
      },          
      template: '',
      link: function(scope, element, attrs){
        console.log(scope.check())
        console.log(scope.checkN())          
      }
    }
});

然后控制台会给我以下信息:

The checkName function has been called [which is the return string of the function]
undefined

真的有可能取决于大写字母的使用吗?这将是非常“意外”的行为。

谢谢你的帮助

沙基

4

1 回答 1

9

Html 不区分大小写,因此根据浏览器的不同,它们彼此之间无法区分myAttributemyattributeAngularjs 的作者在指令方面做出了关于从 html 传递到 javascript 的设计决策,反之亦然。

ngRepeat指令将ng-repeat在视图(html)中使用。同样,您的指令checkN应该check-n用于 Angular 以将其识别为指令。

于 2013-03-27T14:57:50.927 回答