我想创建一个侧边栏的指令。 我在控制器中具有切换侧栏的功能。
如何从我的应用程序中的任何其他控制器访问此功能?
谢谢!
答案 0 :(得分:1)
如果您想在整个应用程序中使用SideBar进行操作,可能是在服务中保存SideBar状态的更好方法。因此,无论何时注入此服务,您都可以访问此服务,并且您可以通过更改此相关服务值来更改SideBar的状态(这可能是因为服务始终只有一个实例,如Singleton模式)。
因此,我将附上将显示当前案例的基本通信模式的图像。
如果我们将更改State Service中active
变量的状态,则SideBar指令将受到影响,因为所有三个控制器都链接到同一个服务实例。
这里Controllers service communication是通过服务在控制器之间进行通信的一个小例子。
希望它会对你有所帮助!
答案 1 :(得分:1)
我在控制器中具有切换侧栏的功能
它不建议在控制器中使用任何UI逻辑。在Angular世界中,这些事情可以通过使用declerative HTML来实现。
<a ng-click="isReplyFormOpen = !isReplyFormOpen">Reply</a>
<div ng-show="isReplyFormOpen" id="replyForm"></div>
回答您的问题:您可以定义包含您的功能的服务。
(function(){
angular.module('YourApp')
.factory('ToggleBar', function(){
function anyFunc(){
//Logic here...
}
return{
toggle: anyFunc
};
});
)();
将服务注入您想要的任何控制器。
(function(){
angular.module('YourApp')
.controller('ControllerName',['ToggleBar',function(ToggleBar){
//Call the service func...
ToggleBar.toggle();
}]);
)();