Что здесь происходит, некоторые элементы меню включены, а некоторые отключены в ui. Поэтому, когда пользователь нажимает на элемент меню, который отключен, он дает ошибку на странице.Взаимодействие между-Service-Controller-Directive AngularJS
Я попытался решить проблему, используя angularjs-service и $ broadcast. Теперь дело в том, что каждая страница, включая левое меню, имеет разные контроллеры, поэтому мне нужно было повторить данные $ broadcast для каждого контроллера. Все, что я с нетерпением жду, это как я могу удалить эту избыточность?
левого Меню Service.js
'use strict';
angular.module("MainApp")
.factory('menuClick', function($rootScope) {
var sharedService = {};
sharedService.notify = {};
sharedService.prepForBroadcast = function(msg) {
this.broadcastItem();
};
sharedService.broadcastItem = function() {
$rootScope.$broadcast('handleBroadcast');
};
return sharedService;
});
левого Меню Controller.js
'use strict';
angular.module("MainApp")
.controller('LeftMenuCtrl', function ($scope, $rootScope, menuClick) {
$scope.handleMenuClick = function(action) {
menuClick.notify.warningNotify = true;
menuClick.notify.errorNotify = true;
menuClick.notify.successNotify = true;
if(!action.IsEnabled)
{
menuClick.notify.warningNotify = false;
menuClick.notify.warningMessage = "This operation is disabled ("+action.Text+")";
menuClick.prepForBroadcast(menuClick.notify);
}
};
});
левой menu.html
<li>
<a ng-click="handleMenuClick(submenu)">{{submenu.Text}}</a>
</li>
Notification-Directive.js
'use strict';
angular.module("MainApp")
.directive('notification', function() {
return {
restrict: 'E',
templateUrl: function (tElement, tAttrs) {
if (tAttrs.type) {
switch (tAttrs.type){
case 'error':
return 'partials/template/show_error.html';
break;
case 'success':
return 'partials/template/show_success.html';
break;
case 'warning':
return 'partials/template/show_warning.html';
break;
}
}
}
};
});
show_error.html
<div ng-hide="notify.errorNotify" ng-init="notify.errorNotify=true">
<button type="button" ng-click="notify.errorNotify = !notify.errorNotify"></button>
<h2>{{notify.errorMessage}}</h2>
</div>
Контроллер-оф-все-в-страницах, где-это-директива-это-used.js
$scope.$on('handleBroadcast', function() {
$scope.notify = menuClick.notify;
});
Я не знаю, как патч весь материал в самой директиве, чтобы можно было избежать повторения вышеуказанного кода во всех контроллерах. Благодаря!
Я не уверен, Я полностью понимаю ваш вопрос, но вижу, что вы делаете отдельные модули для каждой части своего приложения :), чтобы увидеть, как больше людей это делают. У меня есть пример, который я собрал [здесь] (https://github.com/joeLloyd/DoingAngularRight). Изучите приложение/общий/навигационный бар. Здесь вы найдете директиву, которую я построил, чтобы добавить навигатор и контроллер. Надеюсь, это поможет –
@JoeLloyd есть только один модуль в OP-коде, не уверен, что вы подразумеваете под * отдельными модулями * – charlietfl
@charlietfl ah Я просто прочитал его имя модуля, я был отвлечен. Виноват. Но посмотрите на мой пример, в любом случае вы можете увидеть директиву и как функции становятся модулями. –