Angularjs 控制器执行两次,最佳解决方案是什么?

Angularjs 控制器执行两次,最佳解决方案是什么?,angularjs,Angularjs,我知道问题出在哪里,只是不知道如何去解决它。我有两个指令调用同一个控制器,经过研究,我发现这是一件坏事,我应该使用服务或其他东西 现在我相信我必须在这两个控制器之间进行通信。每次我在控制器中执行console.log时,它都会运行两次 我该怎么办 指令 app.directive("sidemenu", function() { return { restrict: 'A', templateUrl: 'partials/sidemenu.html',

我知道问题出在哪里,只是不知道如何去解决它。我有两个指令调用同一个控制器,经过研究,我发现这是一件坏事,我应该使用服务或其他东西

现在我相信我必须在这两个控制器之间进行通信。每次我在控制器中执行console.log时,它都会运行两次

我该怎么办

指令

app.directive("sidemenu", function() {
    return {
        restrict: 'A',
        templateUrl: 'partials/sidemenu.html',
        scope: true,
        transclude : false,
        controller: 'taskbarController'
    }
});

app.directive("taskbar", function() {
    return {
        restrict: 'A',
        templateUrl: 'partials/taskbar.html',
        scope: true,
        transclude : false,
        controller: 'taskbarController'
    }
});
控制器:

app.controller("taskbarController", ['$scope', 'authData', '$location', 'projectsModal', 'sendMessageModal', 'Poller',
  function ($scope, authData, $location, projectsModal, sendMessageModal, Poller) {

    $scope.inbox = Poller.msgdata;
    $scope.project = Poller.newdata;
    $scope.projects = Poller.projects;
    $scope.messages = Poller.messages;

    console.log($scope.inbox);

    $scope.sendMessage = sendMessageModal.activate;
    $scope.showModal = function() {
        projectsModal.deactivate();
        projectsModal.activate();
    };


    $scope.logout = function () {
        authData.get('logout').then(function (results) {
            authData.toast(results);
            $location.path('login');
        });
    }

    authData.get('session');

    $scope.toggle = function(){
        $scope.checked = !$scope.checked
        projectsModal.deactivate();
        sendMessageModal.deactivate();
    }

}]);

您仍然可以使用控制器(而不是服务),只要您使用它来绑定视图(例如),如果您想进行webservice调用(例如),那么我将使用服务


你们需要考虑的是,你们需要两个指令来共享同一个服务还是仅仅共享一个范围?如果它们(指令)功能不同,则使用单独的服务/控制(单一责任主体)如果他们有一些共享数据/作用域,那么考虑如何满足这些需求。如果你想在控制器之间共享作用域,那么你可以使用注入控制器的服务。

你在html中添加了两个指令,它们具有相同的控制器。你还可以共享html代码吗?你想做什么?是否可以通过将控制器添加到页面,然后将模型的某些部分传递到每个指令上的隔离作用域来解决此问题?很可能我必须重新考虑如何为替代方案实现此功能。