javascript - 如何更新 ng-click Angular js 上的数组项?

标签 javascript html angularjs

我有一个网格,其中包含序列中提供的形状名称。

[正方形、三 Angular 形、圆形、椭圆形、五边形、六边形、十边形]

var card = 
    [
      {name:'square',color:'pink'},
      {name:'triangle',color:'lightgrey'},
      {name:'circle',color:'lightblue'},
      {name:'oval',color:'yellow'},
      {name:'pentagon',color:'lightgreen'},
      {name:'hexagon',color:'black'},
      {name:'decagon',color:'cyan'}
];

我正在尝试将所选单元格的文本值从网格更新为序列中的下一个文本。我只想在鼠标悬停在单元格上时显示文本值。正如我现在所拥有的,它似乎可以使用 addEventListener(click) 工作,但我想将其转换为 Angular 并使用 ng-click 或 ng-repeat,我是 Angular 的新手,我不知道如何使用这些在这里

var app = angular.module('cards', ['ngAnimate']);

app.controller("CardController", function($scope) {

var card = 
    [
      {name:'square',color:'pink'},
      {name:'triangle',color:'lightgrey'},
      {name:'circle',color:'lightblue'},
      {name:'oval',color:'yellow'},
      {name:'pentagon',color:'lightgreen'},
      {name:'hexagon',color:'black'},
      {name:'decagon',color:'cyan'}
];
document.getElementById('grid').addEventListener("click", function(e) {
  if (e.target.nodeName.toLowerCase() === "td") {
    var currentIndex = card.findIndex(function(shape) {
      return shape.name === e.target.innerHTML;
    });
    e.target.innerHTML = card[(currentIndex + 1) % card.length].name;
    e.target.style.backgroundColor = card[(currentIndex + 1) % card.length].color;
  }
});

  
  function generateTable(grid, rows, cols) {
  var row;
  var cells = rows * cols;
  for(var i=0; i < cells; i++){
    // track row length and insert new ones when necessary
    // also creates the first row
    if(i % cols == 0) {
      row = grid.insertRow(-1);
    }
    // track our position in the card list
    // modulo operator lets us loop through the cards repeatedly
    var thisCard = card[i % card.length];
    cell = row.insertCell(-1);

    
    cell.style.backgroundColor = thisCard.color;
  }
}

  generateTable(document.getElementById('grid'), 10, 10);
 
 
}); 
.card_container {
  position: relative;
  width:500px;
  height:500px;
  text-align: center;
  vertical-align: middle;
  table-layout:fixed;
  z-index: 1; 
  font-size: 1em;
}
.card_container td   {
  width:50px;
  height:50px;
  line-height: 50px;
}

table {
	margin: 0px auto;
  
}

.cntr {
  margin: 15px auto;
}
<html ng-app="cards">
	<head>
		<meta charset="utf-8">
		<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
	
		<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js" type="text/javascript"></script>
		<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-animate.min.js" type="text/javascript"></script>
	</head>
<body>
	<div class="cntr" ng-controller="CardController">
		
<table id="grid" class="card_container" ng-mouseenter="hover = true" ng-mouseleave="hover = false" >
  <p ng-if="hover">  </p>
 
</table>
    
    
	</div>
</html>

最佳答案

请看看这个骗子https://plnkr.co/edit/BvrM0a2Rhi4zFSFvR038?p=preview 。我已经修改了您的代码 Angular 方式以在鼠标悬停时显示文本。

var app = angular.module('cards', ['ngAnimate']);

app.controller("CardController", function($scope) {

var card = 
    [
      {name:'square',color:'pink'},
      {name:'triangle',color:'lightgrey'},
      {name:'circle',color:'lightblue'},
      {name:'oval',color:'yellow'},
      {name:'pentagon',color:'lightgreen'},
      {name:'hexagon',color:'black'},
      {name:'decagon',color:'cyan'}
];
 $scope.onMouseHover = function(e) {
  if (e.target.nodeName.toLowerCase() === "td") {
    var currentIndex = card.findIndex(function(shape) {
      return shape.name === e.target.innerHTML;
    });
    e.target.innerHTML = card[(currentIndex + 1) % card.length].name;
    e.target.style.backgroundColor = card[(currentIndex + 1) % card.length].color;
  }
};

  
  function generateTable(grid, rows, cols) {
  var row;
  var cells = rows * cols;
  for(var i=0; i < cells; i++){
    // track row length and insert new ones when necessary
    // also creates the first row 
    if(i % cols === 0) {
      row = grid.insertRow(-1);
    }
    // track our position in the card list
    // modulo operator lets us loop through the cards repeatedly
    var thisCard = card[i % card.length];
    cell = row.insertCell(-1);

    
    cell.style.backgroundColor = thisCard.color;
  }
}

  generateTable(document.getElementById('grid'), 10, 10);
 
 
}); 
/* Put your css in here */

.card_container {
  position: relative;
  width:500px;
  height:500px;
  text-align: center;
  vertical-align: middle;
  table-layout:fixed;
  z-index: 1; 
  font-size: 1em;
}
.card_container td   {
  width:50px;
  height:50px;
  line-height: 50px;
}

table {
	margin: 0px auto;
  
}

.cntr {
  margin: 15px auto;
}
<!DOCTYPE html>
<html ng-app="cards">

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <meta charset="utf-8">
  <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">

  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js" type="text/javascript"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-animate.min.js" type="text/javascript"></script>

  <script src="app.js"></script>
</head>

<body ng-controller="CardController">
  <div class="cntr" ng-controller="CardController">

    <table id="grid" class="card_container" ng-mouseenter="hover = true" ng-mouseleave="hover = false" ng-mouseover="onMouseHover($event)">
    </table>
  </div>
</body>

</html>

关于javascript - 如何更新 ng-click Angular js 上的数组项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42495615/

相关文章:

html - 为什么部分样式在将它们移动到专用的 .css 文件后没有缓存起来?

javascript - Angular UI路由器初始化

javascript - BXSlider 在切换幻灯片时暂停 Youtube 视频

javascript - 这些语法有什么区别请详细解释一下?

javascript - 无法使用 jquery 按类访问嵌套 <p> 元素

html - 中心垂直在参与 div 不是容器

javascript - 添加一个使用 jquery 滚动时移动的动态 div

html - 如何在没有CSS的情况下使用pre标签显示span标签

javascript - Angular 未捕获引用 $injector

angularjs - Angular 过滤器名称作为变量