gpt4 book ai didi

angularjs - Angular 范围和 ng-click/ng-show 设置多个 div

转载 作者:行者123 更新时间:2023-12-04 17:46:04 25 4
gpt4 key购买 nike

我正在为我的代码寻找一些帮助。

主要目标是能够点击任何加号图标并让它覆盖所有其他 div 块。

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

正如您将在阻止 时看到的那样2 单击它会执行所有预期的操作。

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

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

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

我已经看过很多这样的选项 post here .

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

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

如果我不得不使用这种类型的选项,甚至说 10 个块,那将是一团糟。

主要问题

有没有更好的 Angular 方法可以让这个工作……当任何加号图标被点击时,它会改变范围,然后由 ngclass 和 ng-show 使用?

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

非常感谢。

我已经建立了一个工作 FIDDLE HERE .

enter image description here

这是最终的工作示例 阿维 git ·古普塔。

enter image description here
<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 {...

WORKING FIDDLE OF THIS HERE

最佳答案

编辑(基于提问者的评论) :

UPDATED FIDDLE

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

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

    初始状态:
  • 没有选择任何块。
  • 没有一个块被覆盖。

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

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

  • 代码:
    $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();
    }
    };
  • 演示中使用了所有相同的设置块大小,但实际使用的所有 div 块都是不同的高度和宽度。每个块都是不同的图像

  • 您应该考虑使用 ng-src .

    我假设您可能正在从数据库中检索所有这些内容。然后,如果可能,您可以将每个图像放在一个固定大小的 div 中,以便它们都具有相同的大小。
  • 加上显示器分为 2 个垂直的半屏部分

  • 可以通过调整一些 css 来设置正确。

    原答案 :

    WORKING FIDDLE

    假设您的应用有两种状态:
  • 初始状态(未触及)
  • 触摸状态

  • 最初,您处于初始状态:
  • 没有显示正确的 div。
  • 所有图标都是“加号”(没有“减号”)
  • 没有一个块被覆盖。

  • 代码:
    $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,未覆盖。

  • 代码:
    // 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];

    });
    };

    所以,基本上当用户与 View 交互并实际点击图标时,他/她会转到 touched state (运行上面的代码)。

    只有当所有图标都是“加号”时,才必须将用户发送到 initial state :
    if ($scope.plusCount === $scope.blocks.length) {
    $scope.setToInitialState();
    }

    html的变化 :
  • 添加 ng-init="setToInitialState()"到最外面的 div,这样我们最初就处于初始状态。

  • 代码:
    <div class="container" ng-app="plusMinusApp"  ng-controller="plusMinusController" ng-init="setToInitialState()">
  • 使用 ng-repeat 而不是每个块的复制粘贴代码:

  • 代码:
    <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>

    希望对你有帮助!

    关于angularjs - Angular 范围和 ng-click/ng-show 设置多个 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34523109/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com