我有一个 ng-repeat 循环,与 ng-switch 和 ng-bind 结合使用(我假设 ng-switch 不是这里的问题)。
<div ng-repeat="message in messages track by message.id">
<div ng-switch="message.yesno">
<div ng-switch-when="true">
text 1
</div>
<div class="click-me" element_id = "{{message.id}}" ng-switch-when="false" ng-bind="message.texts[message.active_text]">
</div>
</div>
</div>
消息被定义为具有以下结构的对象数组:
{
id: int,
yesno: boolean,
texts: array, // containing N strings
active_text: int // index of the current displayed string
}
除了一个 setter 方法(它在返回对象的同一个函数中,假设这个函数是对象构造函数)
this.setNextText = function(){
this.active_text= (++this.active_text)%(this.texts.length);
}
当消息对象的 yesno 属性为 false 时,用户可以单击文本并将其更改为下一个可用文本(然后在到达数组绑定时返回原始文本)。
因此,当用户点击文本时,会触发以下事件:
$(document).on("click",".click-me",function(){
var message_id = $(this).getAttribute("element_id");
$.grep($scope.messages, function(e){ return e.id == message_id; })[0].setNextText(); // obj containing the message
});
基本上:
- 获取点击消息的索引(对应于当前 ng-repeat 循环的索引)
- 增加它
这样,nd-bind 应该绑定message.texts中可用的下一个文本。然而,事实并非如此。
我很确定:
- ng-bind: 设置正确(message.texts 的第一个元素打印正确)
- message.active_text 已正确更新
另外,我尝试使用:
$scope.apply();
但我什至得到一个错误(通常它有效):
未捕获的类型错误:$scope.apply 不是函数
有什么线索吗?