AngularJS:绑定到ng repeat会模糊转发器内的输入

AngularJS:绑定到ng repeat会模糊转发器内的输入,angularjs,angularjs-ng-repeat,ng-repeat,Angularjs,Angularjs Ng Repeat,Ng Repeat,我这里有一个类似的问题: 这是小提琴: 我的问题是,我还有一个save函数,在用户键入时调用它 因此,我有这样一个例子(后端可能有对$scope.piece.movements的操作。当对象作为response.data返回时,它会重新设置$scope.piece.movements,并在该点失去焦点 $scope.save = function () { $http.post('/save/', { object: $scope.piece.movements }).then(functi

我这里有一个类似的问题:

这是小提琴:

我的问题是,我还有一个save函数,在用户键入时调用它

因此,我有这样一个例子(后端可能有对$scope.piece.movements的操作。当对象作为response.data返回时,它会重新设置$scope.piece.movements,并在该点失去焦点

$scope.save = function () {
$http.post('/save/', { object: $scope.piece.movements }).then(function (response) {
      $scope.piece.movements = response.data; // loses focus here
 });
};

如果有人知道我如何在fiddle/plnkr中模拟post/save,我会很乐意更新我的fiddle。

与其使用函数,不如使用$watch来更改片段。然后在watch中,您可以执行逻辑来确定这是否是正确的时间(请参阅超时逻辑)触发更改并调用工厂执行保存。如图所示,此操作不会失去焦点

var app = angular.module('app', [])
    .controller('controller', function($scope, $timeout, dummy) {
        $scope.piece = {};
        $scope.piece.movements = [{name: "Allegro"} , {name: "Presto"}];

        var saveTimeout;
        $scope.$watch('piece.movements', function(){
            $timeout.cancel(saveTimeout)
            saveTimeout = $timeout(function(){
                dummy.save($scope.piece.movements, function(data){
                    $scope.piece.movements = data;
                    console.log($scope.piece.movements);
                })
            }, 1500);
        }, true);

    })
.factory('dummy', function(){
    var changes = {
        content: "",
        save: function(content, callback){
            this.content = content;
            callback(this.content);
        },
        get: function() {
            return this.content;
        }
    };
    return changes;
});

为什么不仅仅是$watch-piece。更改的移动并将这些更改发布到保存服务/工厂。可能是这样的感谢您的快速响应,我不能使用$watch,因为我不想让它在每个字母上都被触发。我让它在用户停止键入时触发保存。您如何处理?根据只会如果用户在x时间(示例中为1.5秒)内未键入,则触发。也可以使用其他逻辑样式。