use*_*367 7 javascript html5 angularjs
一组HTML输入控件绑定到testVar:
<div ng-app>
<div ng-controller="TestCtrl">
<input type="text" ng-model="testVar">
<input type="number" min="1" max="10" ng-model="testVar">
<input type="range" min="1" max="10" ng-model="testVar">
<button ng-click="testVar = 5">set to 5</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
最初所有输入控件都按预期显示此值,但是当通过type ="range"或type ="text"输入更改testVar时,type ="number"输入变为空白.以编程方式设置testVar的值会导致预期的行为:所有输入都显示更新的值.
这个简单的案例证明了这个问题:http://jsfiddle.net/7cbYp/
为什么会发生这种情况,如何解决?
一个快速修复方法是创建一个指令并观察模型和 HTML 项目本身的变化
超文本标记语言
<input type="number" min="1" max="10" fix="testVar">
Run Code Online (Sandbox Code Playgroud)
JS
var App = angular.module('App', []);
App.directive('fix', function(){
return{
link: function(scope, elem, attrs){
scope.$watch(attrs.fix, function(v){
if(typeof v === 'string') v = parseInt(v, 10);
elem.val(v);
});
elem.bind('change', function(){
scope[attrs.fix] = elem.val();
scope.$digest();
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
我只在 Chrome 上测试过,它可以工作。
jsfiddle: http: //jsfiddle.net/jaimem/HLnqt/3/
注意:必须有一种更干净的方法来做到这一点。
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |