Angularjs 如何将转义时的输入字段重置为以前的值

Angularjs 如何将转义时的输入字段重置为以前的值,angularjs,angular-directive,Angularjs,Angular Directive,按下escape键时,将输入字段设置为其先前值的正确方法是什么 我发现这个指令: .directive('resetWithEsc', function() { return { restrict: 'A', require: '?ngModel', link: function(scope, element, attrs, controller) { element.on('keydown', function(e

按下escape键时,将输入字段设置为其先前值的正确方法是什么

我发现这个指令:

.directive('resetWithEsc', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        link: function(scope, element, attrs, controller) {
            element.on('keydown', function(ev) {
                if (ev.keyCode != 27) return;

                scope.$apply(function() {
                    controller.$setViewValue("");
                    controller.$render();
                });
            });
        }
    };
})
但它表示
TypeError:无法读取null的属性“$setViewValue”

我还尝试存储上一个。$scope.temp中的值,用于检测ESC按下:

.directive('escKey', function () {
    return function (scope, element, attrs) {
        element.bind('keyup', function (event) {
            console.log("UP");
            if(event.which === 27) { // 27 = esc key
                console.log("ESC");
                scope.$apply(function (){
                    scope.$eval(attrs.escKey);
                });
                event.preventDefault();
            }
        });
    };
})
然后我这样用它:

<input data-ng-focus="temp = mymodel.value"
    ng-model-options="{updateOn: 'blur'}" esc-key="mymodel.value = temp" 
    type="text" data-ng-model="mymodel.value"
/>

它检测到正确的escape键,如果我设置了
esc key=“mymodel.value='TEST'
,它也会将输入字段设置为
'TEST'
,但变量不起作用


那么,这样做的最佳选择是什么?我需要它在重复循环中动态使用。

删除
updateOn:'blur'
并重置
temp
成功了

<input data-ng-focus="temp = mymodel.value"
    esc-key="mymodel.value = temp; temp='';" 
    type="text" data-ng-model="mymodel.value"
/>


我仍然希望有一个更干净的解决方案,因为我只想在模糊上更新模型。

我以@Bharat的plunker为例,对它进行了调整,以使用指令

(函数(角度){
"严格使用",;
angular.module('optionsExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.users=[
{
名称:'name1',
数据:“”
},
{
名称:'name2',
数据:“”
},
{
名称:'name3',
数据:“”
},
];
}])
.directive('escape',function(){
返回{
要求:'ngModel',
链接:功能(范围、元素、属性、模型){
元素绑定('keyup',函数(事件){
如果(event.which==27){//27=esc键
ngModel.$rollbackViewValue();
event.preventDefault();
}
});
}
}
});
})(窗口角度)

示例-示例ngModelOptions指令模糊生产
  • 姓名:
    user.name=

如何定义“上一个值”?我想你太努力了。对此,您不需要复杂的指令。您只需要恢复保存的值,这并不困难。问题是,保存的值从何而来?
data ng click=“temp=mymodel.value”
如果我在模板中执行
{{temp}
,它会显示正确的值,因此每次用户单击输入时?这似乎是脆弱和不可靠的。它对标签式焦点也不起作用,等等。你说得对,应该是
data ng focus
I更改了它。仍然不是一个好方法。tab out和tab in会触发覆盖上一个真实值。初始值从何而来?您的要求似乎与angular docs中所示的第一个示例相同,还是您没有使用表单?对,但这个示例是静态的,如何能够像在重复循环中一样进行动态操作?您是指ng repeat中的输入。类似这样的东西如果这是你正在寻找的,那么如果你能改变你的问题就好了mh我不知道在必要的地方有一个表单和命名的输入字段来做这件事。。。所以你是对的,这将是另一个问题。谢谢你的plnkr。真的很有帮助。