Angularjs 角度指令';s控制器初始化两次
我有一个基于 我为处理即将到来的MQTT消息制作了一个指令rsNotification rsNotification.jsAngularjs 角度指令';s控制器初始化两次,angularjs,angularjs-directive,ionic-framework,ionic,angular-ui-router,Angularjs,Angularjs Directive,Ionic Framework,Ionic,Angular Ui Router,我有一个基于 我为处理即将到来的MQTT消息制作了一个指令rsNotification rsNotification.js (function (angular) { console.log("*** rsNotification module init"); var rsNotificationModule = angular.module('rsNotification', ['rsMessenger']); var NotificationControl
(function (angular) {
console.log("*** rsNotification module init");
var rsNotificationModule = angular.module('rsNotification', ['rsMessenger']);
var NotificationController = ['$log', '$scope', 'MessengerService', function ($log, $scope, MessengerService) {
console.log("*** NotificationController init", $scope);
$scope.badgeCount = 0;
$scope.$on('rsMQTT.message', function (event, message) {
$scope.badgeCount++;
MessengerService.post(message.toString());
});
}];
rsNotificationModule.directive('rsNotification', function () {
console.log("*** Loading template");
return {
restrict: 'E',
templateUrl: 'templates/rs-notification.html',
controller: NotificationController
};
});
})(angular);
在app.js中,我对starter模块有以下配置
…以及指令rs notification.html
<button class="button button-clear">
<span class="fa fa-flag-o fa-2x"></span>
</button>
<span class="rs-badge danger" ng-show="badgeCount > 0">{{badgeCount}}</span>
ion导航按钮
元素的内容进入另一个元素,然后注入$ionViewController
。因此,您的指令实际上可能被编译(并且控制器被实例化)两次(或更多)。要解决这个问题,您应该将逻辑移到服务中,并将该元素作为一个简单的元素。我不确定这在您的组件上是一个问题,但可能在父指令中。试着把你的组件放在更高的层次上,看看结果是否相同。你是对的@Werlang,只有当我把rs通知放在ion导航按钮内时才会发生这种情况!我会作为一个bug报告给爱奥尼亚团队(如果你还没有)
<button class="button button-clear">
<span class="fa fa-flag-o fa-2x"></span>
</button>
<span class="rs-badge danger" ng-show="badgeCount > 0">{{badgeCount}}</span>
<ion-side-menus enable-menu-with-back-views="false">
<ion-side-menu-content>
<ion-nav-bar class="rs-header">
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-buttons side="left">
<button class="button button-icon button-clear ion-navicon color-primary-light" menu-toggle="left"></button>
</ion-nav-buttons>
<ion-nav-buttons side="right">
<div>
<button class="button button-clear" ng-click="showCart()">
<span>{{cartName}}</span>
<span class="fa fa-shopping-cart fa-2x color-primary-dark"></span>
</button>
</div>
<rs-notification></rs-notification>
</ion-nav-buttons>
</ion-nav-bar>
<ion-nav-view name="menuContent"></ion-nav-view>
</ion-side-menu-content>
<!-- Left menu... -->
</ion-side-menus>
*** rsNotification module init
*** NotificationController init
*** NotificationController init
*** Loading template