【问题标题】:Angular JS: Changing input value from jquery does not update ng-modelAngular JS:从 jquery 更改输入值不会更新 ng-model
【发布时间】:2013-04-30 18:16:31
【问题描述】:

我是 AngularJS 的新手。我正在尝试编写一个输入字段列表的指令,当您按下逗号键(plunkr 中的 188 数字)时,它将触发“完成”功能,以便更新模型。我的指令中有一个带有这个值列表的 ng-repeat。

我还阅读了一些关于使用 scope.$apply 的帖子,但在这种情况下似乎不起作用。有关如何访问正在更改的 ng-repeat 中的项目或如何直接在该列表项上更新 ng-model 的任何帮助?

如果您查看我的 plunkr,请更改名称并在末尾加上逗号。在顶部的区域中,您可以看到模型的值。您可以看到逗号仍然存在,这不是我的预期行为,因为它不在输入字段本身中。

这里的代码: http://plnkr.co/edit/PBzRD8fBQ6D1GCEC869K?p=preview

【问题讨论】:

  • 你只是想阻止 , 输入标签?
  • 输入失去焦点时逗号被删除。我不明白你的问题。

标签: jquery angularjs angularjs-directive


【解决方案1】:

查看我建议的更改,也许这就是您想要的用例

http://plnkr.co/edit/YXtVTJSQNyJo7njdiu4Z

如果您有任何问题,我会根据要求提供更多反馈;)

【讨论】:

  • 感谢您的回复,这正是我想要的,谢谢!
  • @Johann Sonntagbauer,请引用重要链接中最相关的部分,并仅使用链接为您的答案提供更多上下文。请参阅stackoverflow.com/help/how-to-answer“为链接提供上下文”部分了解更多信息。
  • @JoshMcKearin THX 的建议。
【解决方案2】:

如果你只是想阻止用户输入逗号,你可以在没有 jQuery 的情况下做到这一点:

$html.on('keydown', 'li', function (e) {
    if (e.keyCode === 188) {
        return false;
    }
});

还有(据我所知,在有限的上下文中)没有理由使用 $compile。您应该可以只使用模板:

http://jsfiddle.net/VM285/

myApp.directive('mydirective', function () {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            list: '='
        },
        link: function (scope, element, attrs) {
            element.bind('keydown', function (e) {
                if (e.keyCode === 188) {
                    e.preventDefault();
                    return false;
                }
            });
        },
        template: '<div><ul ng-model="list"><li ng-repeat="item in list"><input ng-model="item.Name" type="text" /></li></ul></div>'
    }
});

再进一步,您可以完全不使用 DOM 操作:

http://jsfiddle.net/VM285/1/

myApp.directive('mydirective', function () {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            list: '='
        },
        link: function (scope, element, attrs) {
            scope.checkForComma = function(item) {
                if (item.Name.indexOf(',') > -1) {
                    item.Name = item.Name.replace(/,/g, '');
                }
            };
        },
        template: '<div><ul ng-model="list"><li ng-repeat="item in list"><input ng-model="item.Name" type="text" ng-change="checkForComma(item)" /></li></ul></div>'
    }
});

【讨论】:

  • 嗨,Langdon,感谢您的回复,这会起作用,但我希望它在逗号被击中时执行操作,然后从值中删除逗号。
猜你喜欢
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
相关资源
最近更新 更多