我不了解角度的东西是使用大括号背后的一致性。
说我想将角度变量传递给ng-click函数:
ng-click="getComments('{{post.Id}}')"
这在HTML中看起来不错。但是当我点击时,参数实际上仍然是' {{post.Id}}'即使在html代码中它被angular更换。
也说我想这样做:
<customDirective customAttribute="{{post.Id}}_postID" ></customDirective>
这引发了解析错误,我不知道为什么。这是错误:
语法错误:令牌&#39; post.Id&#39;出乎意料的是,在[post.Id}} _ postID]开始的表达式[{post.Id}} _ postID]的第3列期待[:]。
所有上述代码都在ng-repeat中。
答案 0 :(得分:0)
如果ng-click=""
引号之间传递的是代码,那么定义为$scope.variable
的所有变量都只能作为variable
使用,因此工作代码将是
ng-click="getComments(post.id)"
关于第二部分,在编写自己的指令时,指定要传递给它的属性,如下所示:
scope: {
attrA: '@',
attrB: '='
}
attrA
将绑定为字符串,而attrB
将绑定为对象或其可能的任何类型变量。有关详细信息,请参阅此SO answer以确保您对用例使用正确的绑定。
所以你的第二个代码示例应为:
<customDirective customAttribute="{{post.Id}}+'_postID'" ></customDirective>
因为括号内的所有文本都应该被视为在定义任何其他JS变量时使用的代码。
关于何时在AngularJS中使用哪个大括号的整个难题,这里有一个很棒的SO answer。
修改强>
我已经为你的指令问题尝试了一些替代方案,这个可行,但是如果重要的话,在值改变后不会更新:
<customDirective customAttribute="post.Id+'_postID'" ></customDirective>
虽然我建议您使用错误的解决方案来解决问题,但考虑到您不仅仅想要找出Angular的绑定系统。
最好的解决方案是在teh指令中编辑字符串,或绑定引用函数的对象以确保传播所有更改:
$scope.post = function(){
return {
id: $scope.someVar.id + "_id"
};
};