来自控制器的Angular指令功能

时间:2016-04-25 14:02:07

标签: angularjs angularjs-directive

我想创建一个侧边栏的指令。 我在控制器中具有切换侧栏的功能。

如何从我的应用程序中的任何其他控制器访问此功能?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您想在整个应用程序中使用SideBar进行操作,可能是在服务中保存SideBar状态的更好方法。因此,无论何时注入此服务,您都可以访问此服务,并且您可以通过更改此相关服务值来更改SideBar的状态(这可能是因为服务始终只有一个实例,如Singleton模式)。

因此,我将附上将显示当前案例的基本通信模式的图像。

Controllers communication via service

如果我们将更改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();
     }]);
)();