在非角度属性中使用角度变量

时间:2014-03-24 22:16:06

标签: angularjs

我不了解角度的​​东西是使用大括号背后的一致性。

说我想将角度变量传递给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中。

1 个答案:

答案 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"
  };
};