更新控制器数据不会更新视图 - Angular JS - Ionic

时间:2015-05-14 09:13:59

标签: javascript angularjs data-binding ionic

我有这个控制器:

.controller("mainctrl",function($scope,$state){
        var self = this;

        var usuario = window.localStorage.getItem('usuario');
        this.msjs=[];

        var res = window.localStorage.getItem(usuario+'_msjs');
        if(res===null)
        {
            this.msjs=[];
        }
        else{
            this.msjs=JSON.parse(res);
        }

        $scope.$on('newMessageReceived', function(e, msg) {
            //alert('message received:'+msg);
            self.msjs.push(msg);
            alert('mensaje recibido');
            alert(JSON.stringify(self.msjs));

            window.localStorage.setItem(usuario+'_msjs',JSON.stringify(self.msjs));
            $state.reload();

        });
  }

观点:

<ion-view ng-controller="mainctrl as m" >
             <ion-nav-buttons side="right">
                 <button class="button" ng-click="m.logout()">Logout</button>
             </ion-nav-buttons>
             <ion-content id="msjcontent">
                 <h1 class="button-positive" id="log">Mensajes</h1>
                 <div class='card' ng-repeat="msj in m.msjs track by $id($index)">
                     {{msj}}
                 </div>

             </ion-content>
</ion-view>

当$ scope收到该事件时,它会在&#39; msjs中推送一个新元素。阵列。 视图不会更新数据。我不得不把$ state.reload()刷新$ state(来自Angular-Ionic的ui-router)并观察变化。这个刷新给我带来了一些问题,例如$ scopes的多个副本(每个$ state.reload()为1)。我已经尝试过使用$ scope.apply()并且它没有用。我认为这个问题可能是Ionic / angular ui-router的问题。

我想知道一种更好的方法将msjs数组绑定到视图而不刷新$ state。

感谢。

2 个答案:

答案 0 :(得分:1)

我正在编写$ scope.apply(),正确的方法是$ scope。$ apply()。

答案 1 :(得分:0)

.state(url:'/ url',controller:Ctl,templateUrl:'template.html',cache:false)
cache:false ==&gt;解决了我的问题^^