使用$ browser.defer将Angular.js绑定到元素的事件句柄

时间:2015-04-07 17:40:27

标签: angularjs

我是angular.js初学者。任何人都可以详细解释我在下面的代码中做了什么?什么是$ browser和$ browser.defer(listenerOnKey)应该做什么(剩下的代码很清楚)?

element.bind('keydown', function (event) {
    var key = event.keyCode
    // If the keys include the CTRL, SHIFT, ALT, C, V or META keys, or the arrow keys, do nothing.
    if (key == 91 || (15 < key && key < 19) || (37 <= key && key <= 40) || key == 67 || key == 86 || key == 9 || key == 8 || key == 46 || key == 190 || key ==110 )
        return
            $browser.defer(listenerOnKey);
})

var listenerOnKey = function () {
    var value = element.val().replace(/,/g, '').replace('%', '');
    element.val($filter('number')(value));
}

2 个答案:

答案 0 :(得分:2)

$浏览器服务不是'公共'Angular API,所以我建议避免使用任何代码。特别是如果你是初学者

答案 1 :(得分:2)

正如弗拉基米尔所说,它不是公共API,所以你不应该使用它。它是AngularJS内部使用的东西。

  

此外,$browser.defer通过setTimeout(fn, delay)异步执行fn。

因此,不要使用它,只需使用$timeout自行完成。

$timeout(listenerOnKey, 0);

至于代码本身的作用,如果它们点击了某些键,它就不会做任何事情,但是它会调用下面的函数listenerOnKey来执行任何其他键,这会删除任何comma's%标志。

之后,它会运行angularJS过滤器测试以查看该值是否实际上是number

element.val($filter('number')(value));

如果没有,则返回一个空字符串并清除输入。