Angularjs 角度指令';s控制器初始化两次

Angularjs 角度指令';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

我有一个基于

我为处理即将到来的MQTT消息制作了一个指令rsNotification

rsNotification.js

    (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