Angularjs 如何将转义时的输入字段重置为以前的值
按下escape键时,将输入字段设置为其先前值的正确方法是什么 我发现这个指令: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
.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。真的很有帮助。