ng-repeat - > ng-switch - > ng-bind:如何让它工作?

时间:2015-04-13 19:11:26

标签: angularjs angularjs-ng-repeat ng-bind-html

我有一个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时,用户可以单击文本并将其更改为下一个可用文本(然后在到达数组bonduary时返回到原始文本)。

因此,当用户点击文本时,会触发以下事件:

    $(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();

但我甚至得到一个错误(通常是有效的):

  

未捕获的TypeError:$ scope.apply不是函数

有任何线索吗?

0 个答案:

没有答案