我对指令和隔离范围有一个非常奇怪的现象,其中范围中的属性工作或不起作用取决于属性的命名。如果我使用
{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
这有可能取决于大写字母的用法吗?这将是非常“意外”的行为。
感谢您的帮助
schacki
答案 0 :(得分:9)
Html不区分大小写,因此myAttribute
和myattribute
根据浏览器的不同而无法区分。 Angularjs的作者做出了关于从指令传递html到javascript的设计决策,反之亦然。
ngRepeat
指令将在视图(html)中用作ng-repeat
。
同样,您的指令checkN
应该用作check-n
,以便将角度识别为指令。