У меня есть домашний шаблон (ionic) с такой вкладкой:
<ion-tab title="ACCOUNT" icon="ion-trophy" href="#/home/account" badge="levelBadge" badge-style="badge-assertive" on-select="enteringAccount()" on-deselect="leavingAccount()" ng-controller="homeTabCtrl">
<ion-nav-view name="tab-account" animation="slide-left-right"></ion-nav-view>
</ion-tab>
Я хочу, чтобы значение levelBadge менялось, когда что-то происходит в другой области.
В другой области у меня есть этот контроллер (lesonCtrl). При нажатии кнопки в этом представлении контроллер вызывает эту функцию внутри этого контроллера:
$scope.testBoardcast = function() {
MyFirebaseService.testBoardcast();
}
И внутри MyFirebaseService (фабрика) у меня есть эта функция:
function testBoardcast() {
$rootScope.$broadcast('level-up', 2);
}
И внутри моего домашнего шаблона homeTabCtrl я слушаю событие повышения уровня, например:
$rootScope.$on('level-up', function(event, data) {
console.log ("App received level up boardcast: " + data);
$scope.levelBadge = parseInt(data, 10);
});
Но проблема в том, что когда я нажимаю кнопку на урокеCtrl, levelBadge не обновляется, и значок не будет отображаться даже в журнале консоли. Приложение получило повышение уровня. Boardcast: отображается сразу после того, как я нажал кнопку.
Если я слушаю только область homeTabCtrl следующим образом:
$scope.$on('level-up', function(event, data) {
console.log ("App received level up boardcast: " + data);
$scope.levelBadge = parseInt(data, 10);
});
Ничего не происходит, когда я нажимаю кнопку на урокеCtrl.
Я понятия не имею, как заставить levelBadge динамически изменяться, когда я нажимаю кнопку в совершенно другом состоянии вleuranceCtrl.
ОБНОВЛЕНИЕ: Вот мой пользовательский интерфейс:
.state('home', {
cache: false,
abstract: true,
url: "/home",
templateUrl: "app/home/home.html",
controller: 'homeTabCtrl',
onEnter: function($state, MyFirebaseService) {
var userId = MyFirebaseService.LoginUserId();
if (!userId) {
$state.go('auth.signin');
};
}
})
.state('home.courses', {
cache: false,
url: "/courses",
views: {
"tab-courses": {
templateUrl: "app/home/courses.html"
}
}
})
.state('app', {
abstract: true,
url: "/app",
templateUrl: "app/layout/menu-layout.html",
controller: 'AppCtrl'
})
.state('app.lesson', {
cache: false,
url: "/lesson/:id",
views: {
'mainContent': {
templateUrl: "app/all/lesson-detail.html",
controller: "lessonCtrl"
},
}
})
Итак, дом — это абстрактное состояние. Вкладки находятся в домашнем шаблоне. Урок Ctrl на самом деле находится в другом абстрактном состоянии, называемом App. Они не являются партнерской или дочерней областью. Просто 2 разных прицела.