将输入推送到阵列并清除输入不按预期工作

时间:2014-07-27 11:43:13

标签: javascript arrays angularjs

我有一个从工厂获取数据的控制器,如下所示:

.controller('ChatDetailCtrl', function($scope, $stateParams, Messages) {
  $scope.messages = Messages.get($stateParams.partnerId);
  $scope.send = function (input) {
    input.id = Math.random();
    input.sent = true;
    input.time = new Date();
    $scope.messages.data.push(input);
    console.log($scope.messages);
  }
})

我使用ng-repeat在模板上显示消息。然后我有一个输入,使用ng-click运行发送。问题是,当你发送它然后它添加到数组,但是如果你继续输入然后它更新发送的消息,而不是允许你发送一个新消息。

如何以一种允许我重复多次的方式将输入传递给数组?

2 个答案:

答案 0 :(得分:1)

尝试使用angular.copy,这样你就不会推送相同的引用,而是一个类似于输入的全新对象

.controller('ChatDetailCtrl', function($scope, $stateParams, Messages) {
  $scope.messages = Messages.get($stateParams.partnerId);
  $scope.send = function (input) {
    input.id = Math.random();
    input.sent = true;
    input.time = new Date();
    $scope.messages.data.push(angular.copy(input));
    console.log($scope.messages);
  }
})

答案 1 :(得分:0)

在没有看到你的标记和/或input的结构的情况下,这就是诀窍:

JsBin:http://jsbin.com/xevabevi/10/edit

像Charminbear所说,在推送到messages数组后,你需要以某种方式清除输入数据。

或者,您可以在推送中执行以下操作:

$scope.arr.push(angular.copy(input));

这样你就不会将输入数据推送到数组,而是推送它的副本。但是,这不会清除您的输入字段,因为原始input将保持不变。