4

我有一个网页,我正在从服务器接收到的动态 json 数据构建一个表单。不久前,我用 KnockoutJS 开发了它。构建表单后,我还需要通过从服务器发出 ajax 请求来更新表单,每次表单中的值发生更改时。这是小提琴 您看到的,更改事件仅发生在模糊(而不是按键)上。例如,如果一个文本字段的值为 15,并且用户按下退格键,然后再次输入 5,这意味着按下了 2 次按键但值没有更改。到目前为止,一切都很好。

问题 1 现在我将代码转换为 AngularJS。我试图通过 $watch 的范围来捕获更改事件。但是,似乎每次发生按键时都会运行手表,即使在几次按键后值没有改变。这是我尝试的方法但是,此问题仅存在于文本类型输入字段中。

问题2 我以手动方式创建radiogroup,例如,如果json 数据发生更改,那么我们还必须更新html。我怎样才能以一种动态的方式做到这一点。我能够用 KnockoutJS 做到这一点。

问题 3 为什么 ng-hide 不起作用?

4

2 回答 2

5

解决问题 1 是为模糊事件引入指令,以下是我的指令的代码:

angular.module('app', []).directive('ngModelOnblur', function () {
return {
    restrict: 'A',
    require: 'ngModel',
    link: function (scope, elm, attr, ngModelCtrl) {
        if (attr.type === 'radio' || attr.type === 'checkbox') return;

        elm.unbind('input').unbind('keydown').unbind('change');
        elm.bind('blur', function () {
            scope.$apply(function () {
                ngModelCtrl.$setViewValue(elm.val());
            });
        });
    }
};

});

你可以在这里看到工作小提琴http://jsfiddle.net/akeelrehman/GNJtn/1/

我想不出问题 2 的解决方案,所以我已经停止使用无线电输入。

于 2013-08-06T07:44:30.823 回答
1

您可以只使用超时,而不是使用模糊。实际上,这会在用户停止输入 X 毫秒时调用您的函数,而不是在每次按键时调用。

请参阅对类似问题的回复,其中包含完成这项工作的示例代码:https ://stackoverflow.com/a/15723514/1034002

于 2013-08-30T08:38:08.817 回答