html - 通过 Angular 切换 2 个类

标签 html css angularjs

我正在尝试通过 Angular 的 ng-Click 和 ng-Class 选择器在两个类之间切换。

基本上,我想单击 1 行文本、按钮或其他任何内容,然后通过使用 ng-Click 切换样式来更改元素的 z-index。

我尝试了多种解决方案,但几乎没有一个有效。我不完全确定是我在使用 Angular 还是我的 CSS 做错了什么?

Angular :

app.controller("naviController",function($scope){
    "use strict";
$scope.toggles = [{ state: true }, { state: false }, { state: true }]; 
});

HTML:

    <div  ng-controller="naviController">
<div class="nav-container">
    <div class="nav-element-block ne-1" ng-click="toggle.state = !toggle.state">Index</div>
    <div class="nav-element-block ne-2" ng-click="toggle.state = !toggle.state">About</div>
    <div class="nav-element-block ne-3" ng-click="toggle.state = !toggle.state">Dev</div>
</div>

<div id="index-container" ng-class="{'about-container-active' : toggle.state}">Index Container</div>
<div id="about-container" ng-class="{'about-container-active' : toggle.state}">About Container</div>
<div id="dev-container" ng-class="{'about-container-active' : toggle.state}">Dev Container</div>

</div>

CSS:

#index-container {
    display: table-cell;
    width: 100vw;
    height: 90vh;
    padding-top: 10vh;
    background-color: #FFF;
    overflow: hidden;
    animation-name: indexcell;
    animation-duration: 500ms;
    box-sizing: border-box;
    padding-left: 5%;
    padding-right: 5%;
        z-index: 5;
    position: fixed;
    }
.index-container-active {
    z-index: 999;
}
#about-container {
    display: table-cell;
    width: 100vw;
    height: 90vh;
    padding-top: 10vh;
    background-color: #f1ffff;
    overflow: hidden;
    animation-name: indexcell;
    animation-duration: 500ms;
    padding-left: 5%;
    padding-right: 5%;
    z-index: 4;
    position: fixed;

    }
.about-container-active {
    z-index: 999;
}
#dev-container {
    display: table-cell;
    width: 100vw;
    height: 90vh;
    padding-top: 10vh;
    background-color: #f1fff1;
    overflow: hidden;
    animation-name: indexcell;
    animation-duration: 500ms;
    padding-left: 5%;
    padding-right: 5%;
    z-index: 3;
    position: fixed;

    }
.dev-container-active {
    z-index: 999;
}

我实际上想做的是:我有 5 个 div,我想更改它们的类,比方说 5 个链接,当我单击其中一个链接时,我想打开相关类,并且其他人关闭。喜欢:

Index = Class-1-Active
About = Class-2-Inactive
Dev = Class-3-Inactive
Contact = Class-4-Inactive
Portfolio = Class-5-Inactive

假设我们点击“Dev”,然后通过切换类将第 3 类切换到事件状态,然后将所有其他类切换到非事件状态。像这样:

Index = Class-1-Inactive
About = Class-2-Inactive
Dev = Class-3-Active
Contact = Class-4-Inactive
Portfolio = Class-5-Inactive

最佳答案

您的代码中有多个错误,因为有人指出您有打字错误,但这并不能解决您的问题。

我会从头开始,因为 angularjs 中的所有内容都有很多方法可以做同样的事情。这只是一个简单的建议,首先你的 html 需要 ng-click 进入某种功能,你将在其中更改事件状态:

<button class="nav-element-block ne-1" ng-click="toggleState('index')">Index</button>
<button class="nav-element-block ne-2" ng-click="toggleState('about')">About</button>
<button class="nav-element-block ne-3" ng-click="toggleState('dev')">Dev</button>

接下来你需要弄清楚哪个状态是哪个状态,所以将你的状态对象固定为这样的东西:

let toggles = [{
    name: 'dev',
    state: false
  }, {
    name: 'about',
    state: false
  }, {
    name: 'index',
    state: true
  }];

并且您需要在 $scope 上创建您在单击该 div/按钮时调用的函数。它会将所有其他对象的状态设置为 false,除了一个名为 state 的对象:

    $scope.toggleState = function(state) {
    toggles = toggles.map(val => {
      if (val.name === state) {
        val.state = true;
      } else {
        val.state = false;
      }
      return val;
    });
  };

然后您需要分配函数来检查您的 div 以通过特定的 div 名称触发类:

<div id="index-container" ng-class="{'about-container-active' : checkActiveState('index')}">Index Container</div>
<div id="about-container" ng-class="{'about-container-active' : checkActiveState('about')}">About Container</div>
<div id="dev-container" ng-class="{'about-container-active' : checkActiveState('dev')}">Dev Container</div>

最后,您需要一个函数来在您的切换数组中搜索该 div 名称并返回该对象的 .state 并且这将实际触发您的类:

$scope.checkActiveState = function(state) {
    return toggles.find(x => x.name === state).state;
  };

瞧,就是这样,如果您有任何问题请告诉我,这是 fiddle ,您可以使用它:https://jsfiddle.net/pegla/mvprL5ap/1/

关于html - 通过 Angular 切换 2 个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46478803/

相关文章:

jquery - 从单选按钮获取值(value)的最佳方法

javascript - 同步文本框(在表单中输入)

angularjs - nvd3 中的事件处理

angularjs - 未知 $rootElementProvider : Qunit + angularjs integration

html - 将 CSS 过滤器应用于 SVG 时出现 Firefox Bug?

javascript - 使用 Typescript 1.5 时 Angular 为 null 并且需要

html - 渲染 Safari

html - UI - 将文本框显示为下拉列表(只是外观)

html - 如何使用html显示存储在核心数据数据库中的jpeg图像

javascript - CSS - 如果窗口太小,则滚动条出现在表格单元格上