我知道问题出在哪里我只是不知道如何修复它。我有两个指令调用相同的控制器,经过研究我发现它是一件坏事,我应该使用服务或其他东西。
现在我相信我必须在这两个控制器之间进行通信。每次我在控制器内部执行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();
}
}]);
答案 0 :(得分:2)
你仍然可以使用控制器(而不是服务),只要你使用它来绑定视图(例如)如果你想进行webservice调用(例如),那么我会使用服务。
您需要考虑的是,您是否需要两个指令来共享相同的服务或只是范围?如果他们(指令)功能不同,那么使用单独的服务/控制(单一责任委托人),如果他们有一些共享数据/范围,那么考虑如何满足。如果你想在控制器之间共享范围,那么你可以使用服务它会被注入控制器。