2013-03-27 63 views
5

我有一个很奇怪的现象,有一个指令和一个隔离的作用域,其中作用域中的属性工作或不工作,具体取决于属性的命名。如果我使用指令作用域属性根据属性名称中断

{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 

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

感谢您的帮助

schacki

+0

“指令具有骆驼名称,例如'ngBind',可以通过将骆驼名称转换为具有特殊字符':','''或'_'的蛇情况来调用该指令。以'x-'或'data-'为前缀,以使其符合HTML验证器。“ - [指令页面](http://docs.angularjs.org/guide/directive)“从HTML调用指令”部分 – 2013-03-27 15:19:51

回答

9

HTML是不区分大小写,因此myAttributemyattribute将取决于浏览器彼此区分。 Angularjs的作者做出了一个设计决定,关于从html到javascript的转换,反之亦然。

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

+1

非常感谢您的答复。有针对性的团队已将其明确记录在指令中。但是在文档之后,我并没有在这里预期到相同的行为。 – schacki 2013-03-28 07:37:15

+1

@schacki正确 - 在我的情况下,我有属性名称,首字母缩写 - 例如DNSHost =“myhost”,而Angular *默默忽略它们*,没有任何可能的翻译。文档没有提到这一点。刚刚浪费了2个小时:( – 2015-10-02 21:59:22