Javascript Angularjs自动保存输入

Javascript Angularjs自动保存输入,javascript,angularjs,Javascript,Angularjs,我想在上次更改后5秒自动保存我的文本区域控件,并显示脏标志状态 因此,当我开始键入dirty标志时,应该是true,如果我停止键入5秒钟,我应该将最新的值发送到后端代码,并将dirty标志更改为false 我知道ng model选项和去盎司选项。这是一个很好的解决方案,除了不会改变脏旗。ng更改在超时5秒后触发,而不是在更改开始时触发。 对我来说,一个完美的解决方案是在ng change内部进行延迟(去盎司),而不是在此之前,这样我就可以捕捉到更改状态 你知道我怎么处理吗 一种方法是同时使用ng

我想在上次更改后5秒自动保存我的文本区域控件,并显示脏标志状态

因此,当我开始键入dirty标志时,应该是true,如果我停止键入5秒钟,我应该将最新的值发送到后端代码,并将dirty标志更改为false

我知道
ng model选项
和去盎司选项。这是一个很好的解决方案,除了不会改变脏旗。
ng更改
在超时5秒后触发,而不是在更改开始时触发。 对我来说,一个完美的解决方案是在
ng change
内部进行延迟(去盎司),而不是在此之前,这样我就可以捕捉到更改状态


你知道我怎么处理吗

一种方法是同时使用ngChange和$timeout。基本上,您将使用ngChange进行即时状态更改,然后在change函数中创建一个$timeout函数,该函数在最后一次更改后再运行5秒

它可能看起来像这样:

myApp.controller('MyCtrl', function($scope, $timeout){   

var timeout;
$scope.instant = false;
$scope.delayed = false;

//INSTANT & DELAY Function
$scope.change = function(){       
    $scope.instant = true;

    if(timeout) {
        $timeout.cancel(timeout);
    }
    timeout = $timeout(function(){
        $scope.delayed = true;
    }, 5000);

 });
然后在ngChange指令中调用
change()


这是一个有效的

我试图创建一个可能对您有所帮助的指令。请检查下面的代码

angular.module('myApp',[]).controller('myController',['$scope',
职能($范围){
$scope.myModel='Model';
}
])
.directive('delayBind',['$timeout',
函数($timeout){
返回{
范围:{
ngModel:“=”
},
限制:“A”,
要求:'ngModel',
链接:函数(范围、元素、属性、ctrl){
作用域超时;
var parser=函数(值,oldValue){
范围.价值=价值;
if(作用域超时){
$timeout.cancel(超时);
}
timeout=$timeout(函数(){
scope.ngModel=scope.value;
ctrl.$setPristine();
作用域:$apply();
}, 5000);
返回ctrl.$modelValue;
}
ctrl.$parsers.push(解析器);
}
}
}
])

{{myModel}}


{{MyForm.MyModel.$dirty}}
您正在查找两个事件,对吗?一个事件在发生更改时立即触发,在最后一次更改后再触发5秒?@我想还有其他事情。我想在ng repeat中使用输入。所以我尝试了这段代码,我得到了一个错误,超时没有定义。有什么建议吗?我相信即使在ng repeat中使用,它也会起作用。请检查是否正确注入$timeout