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

时间:2015-06-23 09:01:39

标签: angularjs

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

现在我相信我必须在这两个控制器之间进行通信。每次我在控制器内部执行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();
    }

}]);

1 个答案:

答案 0 :(得分:2)

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

您需要考虑的是,您是否需要两个指令来共享相同的服务或只是范围?如果他们(指令)功能不同,那么使用单独的服务/控制(单一责任委托人),如果他们有一些共享数据/范围,那么考虑如何满足。如果你想在控制器之间共享范围,那么你可以使用服务它会被注入控制器。