我遇到的情况就像在这篇文章中here一样,我不仅需要获取元素,还要更改它的元素。名称值。
我已经发现可以这样做:
dataList.splice(index, 1);
dataList.splice(index, 0, newItem);
但是有几个问题。我知道id,但是如果我不时地操纵数组,我会松开索引的跟踪< => id相关因为使用这种方法我将取出项目,更改它们并将它们作为一个" new"一个,对吗?但这有点不太优雅,可能会引起我认为的问题。
基本上我只是想切换一个可见的属性,然后应该在数组中改变。这是数组:
$scope.cLines = [{ id: 1, cColor: 'red', cName: 'Entryline right', visible: true }];
当然里面通常有更多元素,但出于简单原因我留下了一个元素。
可见的切换器应该像那样工作(naiv"伪代码"如果它能像那么简单就行,真的很棒:))
$scope.cLines[id === id].visible = !$scope.cLines[id === id].visible;
如果我可以直接使用过滤器访问元素,那么第二个最好的事情就是这样吗?
提前谢谢。
答案 0 :(得分:2)
有几种方法可以解决这个问题。一种是使用filter()
。
var id = 1;
var visibility = true;
var items = $scope.cLines.filter(function(item) {
return item.id === id;
});
if (items.length >= 1) items[0].visible = visibility;
你可以把它包装成一个函数:
function setVisibility(arr, id, visibility) {
var items = arr.filter(function(item) {
return item.id === id;
});
if (items.length >= 1) items[0].visible = visibility;
}
然后像这样使用它:
setVisibility($scope.cLines, 1, true);
您还可以将$scope.cLines
更新为更复杂的对象,而不仅仅是数组:
$scope.cLines = {
"item" : function (id) {
var items = this.lines.filter(function(item) {
return item.id === id;
});
if (items.length >= 1)
return items[0];
else
return new Object(); //or throw an error
},
"lines" : [
{ id: 1, cColor: 'red', cName: 'Entryline right', visible: true }
//....and more
]
};
然后像这样使用它:
$scope.cLines.item(1).visible = true;
使用此功能,如果必须循环使用,请务必使用$scope.cLines.lines
。
答案 1 :(得分:0)
我不确定我是否完全理解这个问题,所以如果我离开这里,也许你可以澄清你想要做什么。
如果你有一个ng-repeat并且你试图在当前对象中切换一些值,只需将该对象传递给ng-click函数:
<button ng-click="changeVisible(line);" ng-repeat="line in cLines">Visible = {{line.visible}}</button>
然后在你的控制器中,你会有这样的事情:
$scope.changeVisible = function(obj) {
obj.visible = !obj.visible;
}
var app = angular.module('demo', []);
app.controller('DemoCtrl', function($scope) {
$scope.cLines = [{
id: 1,
cColor: 'red',
cName: 'Entryline right',
visible: true
}, {
id: 2,
cColor: 'blue',
cName: 'Entryline right',
visible: false
}];
$scope.changeVisible = function(obj) {
obj.visible = !obj.visible;
}
});
<script src="https://code.angularjs.org/1.3.16/angular.js"></script>
<div ng-app="demo">
<div ng-controller="DemoCtrl">
<button ng-click="changeVisible(line);" ng-repeat="line in cLines">Visible = {{line.visible}}</button>
</div>
</div>