Угловой счетчик ионных значков не обновляется
Я новичок в угловых и считаю, что я не полностью понимаю цикл дайджеста. Я пытаюсь обновить количество значков на вкладке ion.(Используя ionic)
"Ионно-вкладка"
<ion-tab title="Requests" badge="data.badge" ng-controller="RequestTabCtrl" badge-style="badge-assertive" icon-off="ion-pull-request" icon-on="ion-pull-request" href="#/tab/requests">
<ion-nav-view name="tab-requests"></ion-nav-view>
Я написал фабрику, которая будет хранить и массив. этот массив обновляется через socket.io
"Фабрика уведомлений"
.factory('notifications',function(){
var list = [];
return{
all: function(){
return list;
},
add: function(data){
list.push(data);
},
length: function(){
return list.length;
}
};
});
.controller('RequestTabCtrl',function($scope,notifications){
$scope.data = {
badge : notifications.length()
};
});
Моя проблема в том, что счетчик значков не обновляется, когда массив уведомлений обновляется через socket.io. Я проверил, что массив обновляется. На самом деле я могу записать длину массива в консоль и увидеть, как она меняется. Кроме того, я установил переменную области видимости в дочернем io-nav-view вкладки ion-tab и в результате могу видеть, что выражение {{reports.length}} обновляется в этом представлении.
.controller('RequestsCtrl', function($scope,notifications) {
$scope.requests = notifications.all();
})
Я пробовал $watch(в RequestTabCtrl) на notifications.length. Я попытался вызвать $apply(в RequestTabCtrl), что приводит к $digest уже в процессе. Я пробовал $timeout и не вижу положительного результата (в RequestTabCtrl и функции заводской длины). Помощь мне будет высоко ценится.
2 ответа
Благодаря AjinderSingh решение было найдено.
Итак, есть два способа сделать это. Сначала используя $ интервальный подход:
.controller('RequestTabCtrl',function($scope,notifications,$interval){
$interval(function(){
$scope.data = {
badge : notifications.length()
};
},2000);
});
Второй подход заключается в трансляции $ фабрики после добавления элемента в массив. с последующим перехватом этого события в контроллере:
.factory('notifications',function($rootScope){
var list = [];
return{
all: function(){
return list;
},
add: function(data){
list.push(data);
$rootScope.$broadcast('update');
},
length: function(){
return list.length;
}
};
});
.controller('RequestTabCtrl',function($scope,notifications,$interval){
$scope.$on('update',function(){
$scope.data = {
badge : notifications.length()
};
});
});
Я выбираю второй подход, так как он кажется чище.
$ionicPlatform.ready(function() {
$cordovaBadge.promptForPermission();
$scope.setBadge = function(value) {
$cordovaBadge.hasPermission().then(function(result) {
$cordovaBadge.set(value);
}, function(error) {
alert(error);
});
}
});
Для полной ссылки, пожалуйста, проверьте https://blog.nraboy.com/2015/07/modify-the-badge-number-of-an-ionic-framework-app/