角度范围和 ng-click / ng-show 设置多个 div

2023-12-24

我正在为迄今为止的代码寻求一些帮助。

主要目标是能够单击任何加号图标并将其覆盖在所有其他 div 块上。

当单击加号图标时,它还会在右侧显示一个 div 块。

正如您将在阻止时看到的2单击它会完成所有预期的操作。

我正在寻找一种有效的方法来做到这一点Angular单击任何加号图标时。

这只是我在这里展示的一个小示例,实际上需要覆盖 10 到 20 个区块。

如果有人能找到一种在这里使用更少代码并更好地利用范围的方法,我们将不胜感激。

我看过很多这样的选择在这里发帖 https://stackoverflow.com/questions/18871277/adding-multiple-class-using-ng-class.

尝试过这个,但它不想工作......

data-ng-class="{coverThisBlock: value2 == 'off',coverThisBlock: value == 'on'}"

如果我不得不使用这种类型的选项,哪怕是 10 个区块,那将是一个真正的混乱。

主要问题

有没有更好的 Angular 方法来实现这一点......当单击任何加号图标时,它会更改范围,然后由 ngclass 和 ng-show 使用?

如何正确连接此示例的范围?

非常感谢。

我已经建立了一个工作在这里小提琴 https://jsfiddle.net/AngularJR/2mu32g6k/.

这是最终的工作示例作者:阿维吉特·古普塔。

<div class="container" ng-app="plusMinusApp"  ng-controller="plusMinusController">

<div class="row" ng-init="value1 = 'off'">
 <!--<div class="col-xs-4" data-ng-class="{coverThisBlock: value2 == 'off',coverThisBlock: value == 'on'}"> --> 
    <div class="col-sm-4 col-xs-6" data-ng-class="{coverThisBlock: value2 == 'off'}">    
        <div class="divClass" 
        data-ng-click="(selectBlock(1)) ; (status1 = !status1) ; (value1 = { 'on': 'off', 'off':'on'}[value1])" 
        data-ng-class="{'active-selection': status1 == activeClass}">
        1
        </div>
        <i ng-click="(selectBlock(1)) ; (status1 = !status1) ; (value1 = { 'on': 'off', 'off':'on'}[value1])" 
        class="btn btn-primary text-center fa" 
        ng-class="{'fa-minus': status1, 'fa-plus': !status1}"></i>
    </div>
    <div  ng-show="value1 == 'on'" class="col-xs-4 textdiv">Hello</div>
</div>

<div class="row" >
    <div class="col-sm-4 col-xs-6" ng-init="value2 = 'on'">    
        <div class="divClass" 
        data-ng-click="(value2 = { 'on': 'off', 'off':'on'}[value2])" 
        data-ng-class="{'active-selection': value2 == 'off'}">
        2
        </div>
        <i ng-click="(value2 = { 'on': 'off', 'off':'on'}[value2])" 
        class="btn btn-primary text-center fa" 
        ng-class="{'fa-minus': (value2 == 'off'), 'fa-plus': value2}"></i>
    </div>
    <div  ng-show="value2 == 'off'" class="col-xs-3 textdiv">Hello</div>
</div>

<div class="row">  
    <div class="col-sm-4 col-xs-6" data-ng-class="{'coverThisBlock': value2 == 'off'}">    
        <div class="divClass" 
        data-ng-click="(selectBlock(3)) ; (status3 = !status3)" 
        data-ng-class="{'active-selection': !status3 == activeClass}">
        3
        </div>
        <i ng-click="(selectBlock(3)) ; (status3 = !status3)" 
        class="btn btn-primary text-center fa" 
        ng-class="{'fa-minus': status3, 'fa-plus': !status3}"></i>
    </div>
</div>

<div class="row"> 
    <div class="col-sm-4 col-xs-6" data-ng-class="{'coverThisBlock': value2 == 'off'}">    
        <div class="divClass" 
        data-ng-click="(selectBlock(1)) ; (status4 = !status4)" 
        data-ng-class="{'active-selection': status4 == activeClass}">
        4
        </div>
        <i ng-click="(selectBlock(1)) ; (status4 = !status4)" 
        class="btn btn-primary text-center fa" 
        ng-class="{'fa-minus': status4, 'fa-plus': !status4}"></i>
    </div>
    <div  ng-show="status4" class="col-xs-4 textdiv">Hello</div>   
</div>

<div class="row" ng-init="value = 'off'">
    <div class="col-sm-4 col-xs-6" data-ng-class="{'coverThisBlock': value2 == 'off'}">    
        <div class="divClass" 
        data-ng-click="(selectBlock(1)) ; (status = !status) ; (value = { 'on': 'off', 'off':'on'}[value])" 
        data-ng-class="{'active-selection': status == activeClass}">
        5
        </div>
        <i ng-click="(selectBlock(1)) ; (status = !status) ; (value = { 'on': 'off', 'off':'on'}[value])" 
        class="btn btn-primary text-center fa" 
        ng-class="{'fa-minus': status, 'fa-plus': !status}"></i>
    </div>
    <div  ng-show="value == 'on'" class="col-xs-4 textdiv">Hello</div>
</div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="js/plusMinusApp.j"></script>
<script>

var myModule = angular.module('plusMinusApp', []);
myModule.controller('plusMinusController', function ($scope) {

    $scope.status  = false;    
    $scope.status1 = false;
    $scope.status2 = false;
    $scope.status3 = false;
    $scope.status4 = false;    

$scope.blocks = [{
    id: '1',
    block: "1",
  }, {
    id: '2',
    block: "2",
  }, {
    id: '3',
    block: "3",
  }, {
    id: '4',
    block: "4",
  }, {
    id: '5',
    block: "5"
  }];
 // $scope.activeClass = 0;  
  $scope.selectBlock = function(id) {
    $scope.activeClass = id;
    console.log(id);
  };  
});    
</script>  

回答与 NG-REPEAT 有关的问题

ng-repeat 可以为每个不同的 div 使用多个 css 类吗

显然可以。

通过使用范围id像这样...

<div class="block-{{block.id}}">

和这样的CSS...

.block-1 {...

这里的工作小提琴 https://jsfiddle.net/AngularJR/jqumnksx/


编辑(根据提问者的评论):

更新的小提琴 https://jsfiddle.net/yyyn5ejg/60/

  1. 一次只能点击一个吗?或者,如果另一个打开/单击,第一个打开的将被重置并关闭

这将您的代码简化了近 2 倍。

初始状态:

  • 没有选择任何块。
  • 没有任何块被覆盖。

Code:

$scope.setToInitialState = function() {
  $scope.blocks.forEach(function(block) {
    $scope.isSelected[block.id] = false;
    $scope.isCovered[block.id] =  false;
  });
};

触摸状态:

  • 切换单击块的选定状态。 (在选择和取消选择之间切换)。
  • 如果选择,则覆盖并取消选择所有其他块。
  • 如果取消选择,则将应用程序置于初始状态。

Code:

$scope.selectBlock = function(id) {
  $scope.isSelected[id] = !$scope.isSelected[id];
  $scope.isCovered[id] = false;
  if ($scope.isSelected[id]) {
    $scope.blocks.forEach(function(block) {
      if (block.id !== id) {
        $scope.isCovered[block.id] = true;
        $scope.isSelected[block.id] = false;
      }    
    });
  }
  else {
    $scope.setToInitialState();
  }
};
  1. 该演示使用所有相同的设置块大小,但实际使用所有 div 块的高度和宽度不同。每个块都是不同的图像

你应该考虑使用ng-src https://docs.angularjs.org/api/ng/directive/ngSrc.

我假设您可能会从数据库检索所有这些内容。然后,如果可能的话,您可以将每个图像放置在固定大小的 div 中,以便它们都具有相同的大小。

  1. 另外,显示屏分为 2 个垂直半屏部分

可以通过稍微调整 css 来设置。


原答案:

工作小提琴 https://jsfiddle.net/yyyn5ejg/46/

假设您的应用程序有 2 个状态:

  1. 初始状态(未触及)
  2. 触摸状态

最初,您处于初始状态:

  • 没有显示正确的 div。
  • 所有图标均为“加号”(无“减号”)
  • 没有任何块被覆盖。

Code:

$scope.setToInitialState = function() {
  $scope.plusCount = 0;
  $scope.blocks.forEach(function(block) {
    $scope.isPlus[block.id] = true;
    $scope.isShowDiv[block.id] = false;
    $scope.isCoverBlock[block.id] = false;
    $scope.plusCount += 1;
  });
};

当您处于 Touched 状态时:

  • 所有这些块都被覆盖,其中有一个“加号”图标。
  • 仅显示那些块的右侧 div,未覆盖这些块。

Code:

// Run when user clicks on the 'plus' or 'minus' icon.
$scope.selectBlock = function(id) {
  $scope.isPlus[id] = !$scope.isPlus[id]; // toggle between 'plus' and 'minus' icons
  if ($scope.isPlus[id]) {
    $scope.plusCount += 1;
  }
  else {
    $scope.plusCount -= 1;
  }
  $scope.blocks.forEach(function(block) {

    if ($scope.isPlus[block.id]) {
      $scope.isCoverBlock[block.id] = true;
    }
    else {    
      $scope.isCoverBlock[block.id] = false;
    }
    $scope.isShowDiv[block.id] = !$scope.isCoverBlock[block.id];

  });
};

因此,基本上当用户与视图交互并实际单击图标时,他/她就会转到touched state(以上代码已运行)。

仅当所有图标均为“加号”时,才必须将用户发送至initial state:

if ($scope.plusCount === $scope.blocks.length) {
  $scope.setToInitialState();
}

html 的变化:

  1. Add ng-init="setToInitialState()"到最外面的div,这样我们一开始就处于初始状态。

Code:

<div class="container" ng-app="plusMinusApp"  ng-controller="plusMinusController" ng-init="setToInitialState()">
  1. Use ng-repeat https://docs.angularjs.org/api/ng/directive/ngRepeat而不是为每个块复制粘贴代码:

Code:

<div class="row" ng-repeat="block in blocks">
    <div class="col-sm-4 col-xs-6" data-ng-class="{ 'coverThisBlock': isCoverBlock[block.id]}">    
        <div class="divClass" 
        data-ng-class="{'active-selection': !isPlus[block.id]}">
        {{block.id}}
        </div>
        <i data-ng-click="selectBlock(block.id)" 
        class="btn btn-primary text-center fa" 
        data-ng-class="{'fa-minus': !isPlus[block.id], 'fa-plus': isPlus[block.id]}"></i>
    </div>
    <div data-ng-show="isShowDiv[block.id]" class="col-xs-3 textdiv">Hello</div>
</div>

希望对您有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

角度范围和 ng-click / ng-show 设置多个 div 的相关文章

  • JSON 数据的动态表单(不同类型)

    我尝试使用 JSON 中的数据在 AngularJS 中创建动态表单 我有这个工作 HTML p p
  • 如何重置表单中的 $dirty

    我在使用时遇到一个问题 dirty在我的申请表中 问题是一旦您更改表单字段 值 dirty将被设置为true但现在当您撤消更改时 它不会重置 dirty价值false 我们可以重置 dirty价值false手动但之后当您再次更改表单字段值时
  • Angular UI bootstrap 手风琴 - 展开创建可滚动和页面“跳转”

    我正在使用 Angular ui 引导手风琴 一切都很好 除了当我展开一个足够大的手风琴部分时 浏览器会显示页面的滚动条 整个页面会向左摇动滚动条的宽度 当手风琴足够小以至于不需要滚动条时 页面会恢复到原始大小 我不知道该怎么办 这是否需要
  • Angularjs 抛出 TypeError:无法读取未定义的属性“indexOf”

    我正在尝试调试上面的代码 我觉得这非常有用 gt 我什至找不到代码中的问题 也不知道从哪里开始 因为 Angularjs 对我来说仍然很新 我正在尝试本地化 Angularjs 应用程序 我知道为了获得帮助而缺少很多上下文 但我正在尝试查看
  • 在 Angular ui-router 中更改状态而不更改浏览器历史记录

    假设我们有这样的逻辑 从状态A改变到状态B 每当我们到达状态 B 时 应用程序总是通过调用将我们重定向到状态 C state go stateC 现在我们处于状态C 我的问题是如何从状态 C 返回状态 A 考虑到状态 A 可以是我们在运行时
  • 在 AngularJS 中将数组绑定到指令变量

    我正在尝试将数组放入模板中 以便我可以使用其中的各个值 我的问题是 该属性一旦进入我的模板就会变成字符串 因此它不再可以作为 var 0 访问 而是返回 字符串 的第一个字符 通常是 这是数据的简化设置 varForward 100 1 v
  • Angular:DOM更新后调用方法

    我正在从 html 调用一个方法 调用休息服务 来增加 减少屏幕上的计数 现在我想调用另一个方法 即 getThreshold 来检查计数是否达到阈值 如果是 我想显示一条确认消息 我想首先更新屏幕上的计数 然后调用该函数来检查它是否达到阈
  • 将行推入使用 ng-repeat 以角度呈现的表格中

    当客户端单击该行时 我想在表中插入额外的行 不应预取数据 因为我预计最多有 30 行 但每行都有关联的数据 在一次获取中获取这些数据是不合理的 到目前为止 我的方法是使用 ng repeat 迭代我的集合并渲染表格 当客户端按下该行时 客户
  • 函数调用后的两组括号

    我正在寻找如何filters http docs angularjs org api ng 24filter在 Angularjs 中工作 我发现我们需要发送 2 组括号 filter number number fractionSize
  • 选择器的内部文本

    我尝试从此标记中获取内部文本 span class ng binding ng scope Displaying results 1 25 of 17 430 span 使用此选择器 document querySelectorAll di
  • AngularJs 数据绑定不适用于 ionic

    我觉得我在离子输入文本中遗漏了一些明显的东西 我在用angular ui router这条路线 stateProvider state findPersons url findPersons templateUrl html findPer
  • 如何删除 ng-repeat 的默认顺序

    如何停止动态表数据的 ng repeat 内部的默认排序 目前我收到以下订单 地址 客户 ID 姓名 但我想要的是以下顺序 客户 ID 名称 地址 任何帮助我将不胜感激 JS app controller MyController func
  • 包含routeChangeSuccess的AngularJS测试控制器

    我正在尝试创建单元测试来测试导航列表控制器 但在创建测试时遇到问题 这是控制器的代码 navListModule controller NavListCtrl scope NavList function scope NavList sco
  • 从指令动态地将角度属性添加到元素

    我正在尝试构建一个指令来更改缓慢的 ajax 调用按钮上的加载状态 基本上 这个想法是为按钮元素设置一个属性 ng loading 并让指令添加其余的内容 这是html代码
  • 导航嵌套组件时创建面包屑 (Angular 2)

    我正在为此苦苦挣扎 这个想法是有一个组件 当浏览子视图时更新面包屑 例如
  • 当请求新页面时,如何将 AngularJS 路由与 Express (Node.js) 结合使用?

    我正在使用 Express 它从静态目录加载 AngularJS 一般情况下我会要求http localhost 其中 Express 为我服务index html以及所有正确的 Angular 文件等 在我的 Angular 应用程序中
  • Angular UI 模式的范围问题

    我无法理解 使用角度 UI 模式的范围 虽然这里不是很明显 但我已经正确设置了模块和所有内容 据我所知 但这些代码示例尤其是我发现错误的地方 index html 其中重要部分 div class btn group div
  • 当共享相同的行和列时,将网格项设置为不重叠

    现在 当两个网格项共享相同的行和列时 它们会相互重叠 div class some grid container div Item 1 div div Item 2 div div 我如何让它们不重叠 当共享相同的行和列时 其行为可能类似于
  • 使用 JS 在 Angular 中创建删除按钮的确认警报

    我有一个带有删除按钮的表单 我想创建一个单击删除按钮时弹出的确认框 删除按钮当前有效 我在 javascript 中尝试了一些方法 但没有成功 我正在使用角度 这是最好的方法吗 另外 有谁知道这方面的任何例子 我还没有找到任何有效的例子 d
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因

随机推荐

  • 合并两个纠缠的凸包

    如何合并两个纠缠的凸包 例如this https i stack imgur com ALM4G jpg 使用格雷厄姆扫描或任何其他算法在线性时间内形成凸包 基本上 你使用安德鲁的修改 https en wikibooks org wiki
  • 本机查询支持 SQL Server 的 Spring data jpa 流

    我们需要使用 Spring data jpa 从 SQL Server 检索数据 由于我们有数百万条记录 因此我们无法一次请求加载所有数据 是否可以使用本机查询进行流式传输 是的 您可以让您的查询方法在 Spring Data JPA 中返
  • 添加翻转到 JTree 句柄

    我正在尝试对Collapsed Icon https docs oracle com javase 8 docs api javax swing plaf basic BasicTreeUI html collapsedIcon对于 JTr
  • 堆栈溢出 C++

    所以我试图解决一个任务 a 已经有代码 但系统输出 堆栈溢出 我是 C 新手 我的英语不好 所以很抱歉造成误解 include
  • 如何(正确)使用带有实时绑定的枚举类型(TObjectBindSourceAdapter)

    我在用着TObjectBindSourceAdapter对对象使用实时绑定 我正在使用的对象的属性之一TObjectBindSourceAdapter具有枚举类型 但是当我在对象中使用枚举类型时 适配器中的字段永远不会生成 我目前找到的唯一
  • 以编程方式显示 ImageView

    当用户单击按钮时 如何使 ImageView 出现在屏幕中间 我已将图像放在 res drawable 文件夹中 我一直在尝试使用下面的代码 但我不知道如何使 ImageView 出现 View v new ImageView getBas
  • 通过 GUID 保护 AJAX 请求

    我正在编写一个网络应用程序 它将通过 AJAX 发出请求 并希望锁定这些调用 经过一番研究后 我正在考虑使用某种形式的随机令牌 字符串 与请求 GUID 一起传回 这是我的算法的重要部分 将令牌分配给 JavaScript 变量 在服务器端
  • angerlySetInnerHTML 内的 React 组件

    在我的应用程序中 我需要获取 HTML 字符串 从服务器或从用户输入 也许是从 markdown 处理的东西 无论如何 看来我真的需要使用setDangerousHtml 但我还需要该部分内的一些反应组件 例如 我会将一些链接转换为Link
  • 从流中播放 MP3

    有没有办法使用 VB NET 或 C 直接从内存流 没有任何临时文件 播放 MP3 或者从 SQLITe 数据库播放 Thanks 我建议你尝试一下Mp3Sharp http www robburke net mle mp3sharp 它是
  • 如何使 Xvfb 显示可见?

    我通过 Xvfb 在显示编号 99 上运行 selenium 如下所示 usr bin Xvfb 99 ac screen 0 1024x768x8 导出 DISPLAY 99 java jar usr lib selenium selen
  • LoginButton 请求好友列表权限,为什么?

    我正在使用 facebook sdk 中内置的 LoginButton 小部件 我没有对其进行任何更改 我只是将其包含在我的 xml 布局文件中并调用setSessionStatusCallback没有其他的 然而 当我点击登录按钮时 Fa
  • XP 上的 IE 不支持 SNI 允许单个服务器使用多个证书

    我一直在寻找几个小时来找到我的问题的解决方案 虽然我相信我已经能够澄清我遇到问题的原因 但我一直无法找到解决方案 我有一台服务器托管多个网站 其中几个网站正在使用 SSL 证书 我有一些由所有站点访问的共享图像 阻止 SSL 站点上的非安全
  • 如何使用高斯分布对列表进行洗牌

    我想模拟消息上的错误 例如 1000010011 gt 1010000011 有没有办法在Python中实现这个 我尝试了以下方法 有效 import random a 1011101101 b el for el in a b 1 0 1
  • 使用 CSS 以完全流畅的布局使一个 div 显示在另一个 div 下

    我已经更新了我的代码并制作了一个小提琴来解释我正在尝试做的事情 我之前也有过类似的问题 但并没有体现出模板的流动性 我有一个完全流畅的布局我需要让一个div显示在另一个div下面 我想用 CSS 来实现 但我不想使用 javascript
  • Windows 2008 Server r2 上的 mysqltuner.pl

    我通常使用 linux 作为 mysql 并且有一个叫做 mysqltuner pl 的东西 这很棒 但是我们在 Windows 2008 r2 服务器上有一个 mysql 服务器 我想知道你们中是否有人知道我可以使用的类似于 mysqlt
  • 使用 React Router 将类 active 添加到其他父 html 标签

    我已经被困了几个小时来弄清楚如何在提供的 Reactrouter 标签的父 html 标签上添加 classActive 这是代码 使用React Router 版本 3 2 6 li div span Track Page span di
  • 即使使用调用方法也出现“跨线程操作无效”

    我在这里得到 跨线程操作无效 if vlc State VlcPlayerControlState PLAYING if vlc InvokeRequired vlc Invoke new MediaPlayerNoParameterDel
  • 自定义授权属性

    我正在构建自己的会员系统 我不想与 MS 会员提供商有任何关系 我浏览过互联网和 StackOverflow 但我所能找到的只是建立在 MS 会员资格提供商之上的会员资格提供商 不管怎样 我现在几乎已经把所有东西都连接好了 但我想使用一个利
  • 如何将图像从 expo-image-picker 保存到 expo-file-system 然后渲染?

    我试图将选定的图像存储在应用程序中 而不是存储在图像卷中 这是我尝试过的 await FileSystem downloadAsync imageUri the image uri from expo image picker FileSy
  • 角度范围和 ng-click / ng-show 设置多个 div

    我正在为迄今为止的代码寻求一些帮助 主要目标是能够单击任何加号图标并将其覆盖在所有其他 div 块上 当单击加号图标时 它还会在右侧显示一个 div 块 正如您将在阻止时看到的2单击它会完成所有预期的操作 我正在寻找一种有效的方法来做到这一