0

我在这里有一个与此类似的问题: https ://groups.google.com/forum/#!msg/angular/eB19TlFHFVE/Rlh--XImXeYJ

这是小提琴:http: //jsfiddle.net/KGu9n/25/

我的问题是我还有一个保存功能,在用户输入时会被调用。

所以我有这样的东西(后端可能对 $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 中模拟帖子/保存,我会很乐意更新我的 fiddle。

4

1 回答 1

1

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

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;
});
于 2013-06-06T22:15:43.150 回答