角度中的简单点击事件可在两个状态之间切换

时间:2013-08-19 11:49:17

标签: angularjs

我正在以角度构建一个相当简单的演示,应用程序具有相当于主屏幕和菜单的功能,类似于横向模式平板电脑应用程序,其中屏幕左侧有一个始终可见的菜单,以及右边的主要内容。

菜单和主要内容页面都有自己的控制器。

我正在努力使其能够扩展菜单,并将其再次折叠回20%宽度,同时保持主页面的可见性。

我的问题是,创建一个将菜单和主页保存为项目的控制器似乎有点过分,然后尝试将菜单和main_page控制器嵌套在该顶级控制器中。

就我现在所知,是

<body ng-controller="ViewCtrl">
   <div id="menu" ng-controller="MenuCtrl" >
       <div ng-click="toggleMenu($event)" > open menu </div>
       // all my ng-repeats for menu page content
   </div>
   <div id="main" ng-controller="MainCtrl">
       //all my ng-repeats for the main page content
   </div>
<body>  

在我的ViewCtrl中,我有

function ViewCtrl($scope) {
    $scope.toggleMenu = function($event){
        alert('clicked')
    }
}

问题是我认为我需要一种方法来检查菜单是否打开,如果是,请关闭它,否则打​​开它。当菜单打开和关闭时,我必须在MenuCtrl和MainCtrl上设置类,并且我希望能够通过MainCtrl中的单击关闭菜单。

用角度来处理这个问题的最佳方法是什么?

有没有办法在父母上设置课程,如果有的话,我会这样做吗?或者在当前控制器中获取任何div,即使div不是由角度模型创建的?或者我以某种方式将现有的div与控制器关联起来?

这些解决方案中的大多数似乎都很混乱。

1 个答案:

答案 0 :(得分:2)

  

问题是我认为我需要一种方法来检查菜单是否打开,如果是,请关闭它,否则打​​开它。当菜单打开和关闭时,我必须在MenuCtrl和MainCtrl上设置类,并且我希望能够通过MainCtrl中的单击关闭菜单。

有两种方法可以实现这一目标。

  1. 您可以在MainCtrl中触发自定义angular events并在MenuCtrl中收听。

  2. 您可以在父作用域上设置标记(模型)(恰好是ViewCtrl)。

  3. 注意:您不应该从控制器修改DOM元素的类。应该使用指令。