使用AngularJS停用引导导航栏按钮

Deactivating Bootstrap Navbar button using AngularJS

本文关键字:导航 按钮 AngularJS 使用      更新时间:2023-09-26

这里有引导程序导航栏的代码:

var cvApplication = angular.module('cvApplication', []);
cvApplication.controller('contentCtrl', function ($scope) {
    $scope.navButtons = ["Home", "About", "Contacts"];
    $scope.btnActive = "About";
});
<!DOCTYPE html>
<html lang="en" ng-app="cvApplication" ng-cloak ng-init="">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <nav class="navbar navbar-default navbar-static-top" ng-controller="contentCtrl">
            <div class="container-fluid">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#mainNavBarToggler">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a href="#" class="navbar-brand">Subjects</a>
                </div>
                <div class="collapse navbar-collapse" id="mainNavBarToggler">
                    <ul class="nav navbar-nav">
                        <li ng-repeat="navButton in navButtons" ng-class="{ active: btnActive == navButton }" ng-click="btnActive = navButton">
                            <a href="#">{{navButton}}</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
      
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
        <script src="script.js"></script>
    </body> 
</html>

一切都很好,除了当你点击导航上的一个按钮,然后点击另一个按钮时,你点击的上一个按钮不会被停用(也就是说,"活动"类不会被删除,也就是说它仍然突出显示)。我该怎么解决这个问题?

您可以使用控制器中的函数来更新活动按钮的变量。

var cvApplication = angular.module('cvApplication', []);
cvApplication.controller('contentCtrl', function ($scope) {
    $scope.navButtons = ["Home", "About", "Contacts"];
    $scope.btnActive = "About";
    $scope.updateActive = function(navButton) {
            $scope.btnActive = navButton;
    };
});
<!DOCTYPE html>
<html lang="en" ng-app="cvApplication" ng-cloak ng-init="">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <nav class="navbar navbar-default navbar-static-top" ng-controller="contentCtrl">
            <div class="container-fluid">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#mainNavBarToggler">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a href="#" class="navbar-brand">Subjects</a>
                </div>
                <div class="collapse navbar-collapse" id="mainNavBarToggler">
                    <ul class="nav navbar-nav">
                        <li ng-repeat="navButton in navButtons" ng-class="{ active: btnActive == navButton }" ng-click="updateActive(navButton)">
                            <a href="#">{{navButton}}</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
      
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
        <script src="script.js"></script>
    </body> 
</html>

这里有类似的解决方案。

我不知道为什么它适用于函数,但不适用于视图中的插值。可能,您会看到许多本地作用域。