这里发生了什么是启用了一些菜单项,并在UI中禁用了一些菜单项。因此,当用户点击禁用的菜单项时,页面上会显示错误信息。服务控制器指令之间的相互影响AngularJS
我试图用angularjs-service和$ 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>
通知,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啊我刚刚读了他的模块名,我分心了。我的错。但是看看我的示例,无论如何,您可以看到一个指令以及功能如何成为模块。 –