ng-重复对象属性,但在键入后使输入框散焦
ng-repeat on object properties but defocuses input box after typing
我正在使用ng-repeat
将表单元素绑定到我拥有的自定义对象的属性,例如:
$scope.myObject = {
'font-size': 10,
'text-outline-width': 2,
'border-color': 'black',
'border-width': 3,
'background-color': 'white',
'color': '#fff'
}
.HTML:
<div ng-repeat='(key, prop) in myObject'>
<p>{{key}} : {{prop}}</p>
<input type='text' ng-model='myObject[key]'>
</div>
但是,每次我尝试在输入框中键入值时,文本框都会被取消选择,我必须重新选择它才能继续键入。
有没有另一种方法可以对对象进行这种双向绑定,以便我可以自由键入?
下面是 JSFiddle:http://jsfiddle.net/AQCdv/1/
输入没有聚焦的原因是 Angular 在每次 myObject 更改时都重建了 DOM。您可以专门指示 ng-repeat 按键跟踪,这样就不会发生不需要的行为。此外,这将需要在较新版本的库上提供 1.1.5:
function MyCtrl($scope) {
$scope.myObject = {
'font-size': 10,
'text-outline-width': 2,
'border-color': 'black',
'border-width': 3,
'background-color': 'white',
'color': '#fff'
}
}
<script src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
<div ng-app ng-controller="MyCtrl">
<div ng-repeat='(key, prop) in myObject track by key'>
<p>{{key}} : {{prop}}</p>
<input type='text' ng-model='myObject[key]'>
</div>
</div>
更新的小提琴。
这可以通过指令来解决。我创建了一个名为 customBlur
的指令,但它可以随心所欲地调用,前提是它在 HTML 中匹配。在这里查看小提琴:http://jsfiddle.net/AQCdv/3/
angular.module('app', []).directive('customBlur', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elm, attr, ngModelCtrl) {
if (attr.type === 'radio' || attr.type === 'checkbox') return; //ignore check boxes and radio buttons
elm.unbind('input').unbind('keydown').unbind('change');
elm.bind('blur', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
};
});
和要使用的 HTML 指令,例如
<input type='text' ng-model='myObject[key] ' custom-blur>
此指令的作用是取消绑定生成模型更新的事件,从而导致文本字段失去焦点。现在,当文本字段失去焦点(模糊事件)时,模型将更新。
相关文章:
- 将值输入到对象,然后该对象推送到数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 为什么控制台没有't使用输入的对象's的`toString`方法
- 如何使用ng repeat中的选定输入更新我的对象
- 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么
- 将一个html表转换为json对象并将其发送到php页面,该表有一个输入字段
- 将 FormData 对象放入数组中以从不同的输入文件上载文件
- JSON - 输入对象第二级
- 输入对象出现问题
- 如何指定输入对象的预期结构
- 为什么输入对象的value属性不包含值
- 在IE11的Javascript中,将子窗口的文件输入对象传递给父窗口
- 如何使事件onchange的HTML输入对象不提示文件资源管理器
- 如何在React中捕获整个输入对象
- 检查"构造函数"的奇怪javascript行为;输入对象
- 我如何在夜巡中操纵输入对象的范围
- 如果(tosString.call(输入)! = =“(对象数组)“;我不能理解这一点
- JQuery中更新输入对象的问题
- 如何将对焦功能应用于所有“输入”对象
- Jquery设置attr()输入对象