我有这个控制器:
.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。
感谢。
答案 0 :(得分:1)
我正在编写$ scope.apply(),正确的方法是$ scope。$ apply()。
答案 1 :(得分:0)
.state(url:'/ url',controller:Ctl,templateUrl:'template.html',cache:false)
cache:false ==&gt;解决了我的问题^^