【问题标题】:AngularJS ng-click function that adds class to clicked navigation linkAngularJS ng-click 函数将类添加到单击的导航链接
【发布时间】:2014-07-22 21:27:36
【问题描述】:

我正在努力为 angularJS 应用程序的导航侧边栏找到正确的代码。应该发生的是,当您单击链接时,背景颜色应突出显示活动链接。它确实按预期工作,除了您必须在突出显示之前单击每个链接两次。 我做错了什么?任何帮助将不胜感激。

javascript

 $scope.addActiveClass = function ($index) {
        $scope.addActiveClass = $index;
        var checked = $('ul.sidebar2-nav li');

        $(checked).on("click", "", function () {
            $(this).addClass('active-label');

        });
     }

html

<nav id="program-editor-pullout" menustate="closed" >
        <ul class="list-unstyled sidebar2-nav">
            <li ui-sref-active="active-label">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-checked="true">
                        <a ng-click="addActiveClass($index)" ng-class="{active: home}" ui-sref-active="active" ui-sref=".home">Home</a>
                    </label>
                </div>
            </li>
            <li ui-sref-active="active-label">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-checked="true">
                        <a ng-click="addActiveClass($index)" ng-class="{active: evaluations}" ui-sref-active="active"  ui-sref=".evaluation">Evaluations</a>
                    </label>
                </div>
            </li>
            <li ui-sref-active="active-label">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-checked="true">
                        <a ng-click="addActiveClass($index)" ng-class="{active: questions}" ui-sref-active="active" ui-sref=".question">Questions</a>
                    </label>
                </div>
            </li>
            <li ui-sref-active="active-label">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-checked="true">
                        <a ng-click="addActiveClass()" ng-class="{active: hstranscripts}" ui-sref-active="active" ui-sref=".hstranscripts">High School Transcripts</a>
                    </label>
                </div>
            </li>
            <li ui-sref-active="active-label">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-checked="true">
                        <a ng-click="addActiveClass($index)" ng-class="{active: collegetranscripts}" ui-sref-active="active" ui-sref=".collegetranscripts">College Transcripts &amp; Course Work</a>
                    </label>
                </div>
            </li>
            <li ui-sref-active="active-label">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-checked="true">
                        <a ng-click="addActiveClass($index)" ng-class="{active: prerequisites}" ui-sref-active="active"  ui-sref=".prerequisites">Prerequisites</a>
                    </label>
                </div>
            </li>
            <li ui-sref-active="active-label">
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-checked="true">
                        <a ng-click="addActiveClass($index)" ng-class="{active: documents}" ui-sref-active="active" ui-sref=".document">Documents</a>
                    </label>
                </div>
            </li>
        </ul>
    </nav>

CSS

  ul.sidebar2-nav li a.active {
   color: #000;
   cursor: pointer;
   text-decoration: none;
   }
  ul.sidebar2-nav li.active-label {
   background: whitesmoke;
  }

【问题讨论】:

  • 您正在等待第一次单击以绑定所有 li 上的单击事件。所以第一次单击它将绑定事件。在下一个事件中它将触发该事件。这就是为什么它需要两次单击上课申请
  • 在第一次点击时绑定活动类的解决方案是什么?

标签: javascript css angularjs


【解决方案1】:

我找到了解决方案。你的例子是正确的,但在我的 html 代码中我有这个:

<li ui-sref-active="active-label" ng-click="addActiveClass($event, $index)">
        <div class="checkbox">
            <label>
                <input type="checkbox" ng-checked="true">
                <a ng-class="{active: home}" ui-sref-active="active" ui-sref=".home">Home</a>
            </label>
        </div>
    </li>

请注意锚标记上是如何具有 ng-class 和 ui-sref-active 的。我删除了这些属性,它按预期工作。感谢您的指导,不胜感激!!

【讨论】:

    【解决方案2】:

    将点击事件从 a 移动到父 li 标签

    <nav id="program-editor-pullout" menustate="closed" >
                <ul class="list-unstyled sidebar2-nav">
                    <li ui-sref-active="active-label" ng-click="addActiveClass($event, $index)">
                        <div class="checkbox">
                            <label>
                                <input type="checkbox" ng-checked="true">
                                <a ng-class="{active: home}" ui-sref-active="active" ui-sref=".home">Home</a>
                            </label>
                        </div>
                    </li>
    

    将您的点击处理程序更改为类似的内容

    $scope.addActiveClass = function ($event, $index) {
            $scope.addActiveClass = $index;
            //var checked = $('ul.sidebar2-nav li');
    
            //$(checked).on("click", "", function () {
            //    $(this).addClass('active-label');
    
            //});
    
            $($event.target).addClass('active-label');
         }
    

    【讨论】:

    • 我已经添加了这个新代码,但是点击事件没有将活动标签类添加到 li elememt
    • 你能做个小提琴什么的吗?
    • 我找到了解决办法,贴在上面,谢谢你的帮助。问题是我在锚标签中有 ng-class 和 ui-sref-active 。一旦我删除了这些并将 ui-sref-active 仅放置在 li 标签上,它就可以正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2021-07-25
    相关资源
    最近更新 更多