Javascript 向同一对象的属性添加新值
我有一个按钮,需要向对象属性添加一些值。我发现的问题是每次单击都会创建新对象。 我需要的是向特定对象的特定属性添加新值 我明白了Javascript 向同一对象的属性添加新值,javascript,angularjs,angularjs-scope,javascript-objects,Javascript,Angularjs,Angularjs Scope,Javascript Objects,我有一个按钮,需要向对象属性添加一些值。我发现的问题是每次单击都会创建新对象。 我需要的是向特定对象的特定属性添加新值 我明白了 Object { id=0, title="Rolling Stones", sessionsBegin="1443564000000"} Object { id=0, title="Rolling Stones", sessionsBegin="1443564000001"} Object { id=0, title="Rolling Stones",
Object { id=0, title="Rolling Stones", sessionsBegin="1443564000000"}
Object { id=0, title="Rolling Stones", sessionsBegin="1443564000001"}
Object { id=0, title="Rolling Stones", sessionsBegin="1443564000002"}
我需要生成的是这个
Object { id=0, title="Rolling Stones",sessionsBegin="1443564000000, 1443564000001,1443564000002"}
在控制器部件上执行以下操作:
$scope.addItem = function(indexItem, title) {
$scope.cart = {
"id" : indexItem,
"title" : title
}
if ($scope.cart.id==indexItem){
$scope.cart.sessionsBegin=$scope.sessions[indexItem].date;
console.log($scope.cart);
}
}
这在局部视图方面:
<div class="row" >
<div class="large-6 columns" >
<div class="panel">
<div ng-repeat="session in sessions">
{{event.id}} Date: {{session.date }}  
Availability: {{session.availability}}  
<a ng-click="addItem($index, session.title);" ng-show="addMore">ADD </a>
</div>
</div>
</div>
</div>
{event.id}}日期:{{session.Date}
可用性:{{session.Availability}}
添加
不会更改$scope.cart.sessionsbeagin=$scope.sessions[indexItem].date
到$scope.cart.sessionsbeagin+=$scope.sessions[indexItem].date代码>玩这个把戏
但在代码中,每次按“添加”时都会重新定义购物车对象。因此,您的console.log每次都会显示新对象
$scope.cart = { ... } // this bit of code means you delete the 'old' $scope.cart and redefine it with new values
您需要将字符串转换为当前值,如下所示:
// Add a comma if needed:
$scope.cart.sessionsBegin += ($scope.cart.sessionsBegin) ? ', ' : '';
// and then add the value itself:
$scope.cart.sessionsBegin += $scope.sessions[indexItem].date;
顺便说一句,通常你会希望那些sessionbegin
值的列表成为一个数组,这将更容易使用。在这种情况下,我建议:
if (!$scope.cart.sessionsBegin) {
$scope.cart.sessionsBegin = [];
}
$scope.cart.sessionsBegin.push($scope.sessions[indexItem].date);
这对你有用吗
$scope.addItem = function(indexItem, title) {
$scope.cart = $scope.cart || {
"id" : indexItem,
"title" : title
}
if ($scope.cart.id==indexItem){
var sessionAsArray = $scope.cart.sessionsBegin.split(',');
sessionAsArray.push($scope.sessions[indexItem].date);
$scope.cart.sessionsBegin=sessionAsArray.join(',');
console.log($scope.cart);
}
}
尝试角度延伸这几乎是工作。。。当然,我完全同意:最好的办法是将元素推送到一个数组中。出现的情况是,我只添加一次会话…我需要根据用户单击的相同时间添加会话。。如果用户在同一会话(列表上)上单击3次,则需要在阵列上推送3个具有相同值日期的会话。很抱歉,我不明白从这个描述中,您试图实现什么。你能解释一下吗?或者扩展示例(例如正在执行的操作以及生成的数据结构)?使用您的代码,每次单击我存储一个会话。这类对象{id=0,title=“Rolling Stones”,sessionsbeagin=“1443564000000”}
单击的原因是存储用户已单击的相同会话数,因此如果用户单击第一个会话(“1443564000000”)3次,对象必须如下所示:对象{id=0,title=“Rolling Stones”,sessionsBegin=[“1443564000000”、“1443564000000”、“1443564000000”]}