在ng-repeat中生成动态表达式

时间:2014-10-14 06:40:27

标签: angularjs

我有一个ngRepeat元素,其中包含一个触发确认消息的删除按钮。我正在尝试使用动态表达式来显示确认消息:

<div ng-repeat="item in items">
    <a ng-click="delete(item_id)"></a>
    <span ng-show="{{item._id}}_delete">Are you sure you want to delete your review? </span>
</div>

我不确定这是否是创建动态表达式的正确方法,但这是我能让表达式至少在html中生成的唯一方法。

但是我收到所有重复项目的错误(每个错误中包含不同的项ID):

Error: [$parse:syntax] Syntax Error: Token 'cb0a2a73ede6e3a9d7a58_delete' is an unexpected token at column 4 of the expression [543cb0a2a73ede6e3a9d7a58_delete] starting at [cb0a2a73ede6e3a9d7a58_delete].

^该项目的输出item._id例如是543cb0a2a73ede6e3a9d7a58。

3 个答案:

答案 0 :(得分:1)

Angular期望在那里为ng-show返回true或false的表达式。所以只是渲染一个字符串真的没有帮助。您可以定义一个解析为true或false的控制器函数,也可以只编写内联表达式,如ng-show="item.id === 2"。 但是在删除之前你似乎想要一个确认对话框,在这种情况下你应该编写一个自定义指令来拦截执行它之前的click操作(遗憾的是在Angular内置中没有ng-confirm这样的东西)。 以下是此类指令的示例:https://gist.github.com/asafge/7430497

答案 1 :(得分:1)

如果您只是想向用户切换消息,则可以简单地使您的跨度依赖于切换的范围变量,如下所示:

<a ng-click="delete(item_id); showDelete=!showDelete">item</a>
<span ng-show="showDelete">Are you sure you want to delete your review? </span>

JSFiddle here

但是,您可能希望将其全部包含在像@frank blizzard所提到的指令中。

答案 2 :(得分:0)

试试这个:)

AH,如果item._id以数字开头,则会出现错误

变量名称必须以字母开头 link

所以ng-show绑定到范围中的变量并且它是动态创建的。 a_deleteb_delete可以正常工作,但如果它生成1_delete2_delete,则会产生错误,因为这些错误以number开头。

在您的情况下,item._id以您在问题中提到的543cb0a2a73ede6e3a9d7a58之类的数字开头。因此ng-showng-show="543cb0a2a73ede6e3a9d7a58_delete"之类的结尾结束。由于违反了命名约定,这应该会出错。