angulars的隐形按键事件

时间:2015-10-20 17:38:14

标签: angularjs

我基本上是从jQuery背景开始,我现在开始使用angular.js了,我创建了一个小例子,看一个基本上从url获取数据并在表中显示的教程,然后有一个输入字段,使用该表可以搜索和过滤,请参阅下面的整个示例:

<!doctype html>
<html class="no-js" lang="" ng-app="APP">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <title>Angular Search</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="apple-touch-icon" href="apple-touch-icon.png">
        <!-- Place favicon.ico in the root directory -->
        <link rel="stylesheet" href="css/style.css">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    </head>
    <body>
        <!--[if lt IE 8]>
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->

        <div class="container" ng-controller="theController">
            <input type="text" ng-model="search" class="form-control">   
            <table class="table table-striped table-bordered">
                <thead>
                    <td>Id</td>
                    <td>First</td>
                    <td>Last</td>
                    <td>City</td>
                </thead>
                <tbody>
                    <tr ng-repeat="user in users | filter:search" >
                        <td>{{ user.id }}</td>
                        <td>{{ user.fname }}</td>
                        <td>{{ user.lname }}</td>
                        <td>{{ user.city }}</td>
                    </tr>
                </tbody>
            </table>
        </div>    


        <script type="text/javascript"
                src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
        <script>
            angular.module('APP' , []).
            controller('theController' , [ '$scope' , '$http' , function($scope , $http){
                $http.jsonp('http://www.filltext.com/?rows=30&id={index}&fname={firstName}&lname={lastName}&city={city}&callback=JSON_CALLBACK').success(function(data){
                                $scope.users = data
                            }) 
            }])
        </script>        

    </body>
</html>

(你可以在本地运行脚本,它会运行得非常好,只是无法成功地将它变成一个小提琴)

现在我只是想如果这是在jQuery中完成的,我必须有一些像keypress()事件监听器附加到搜索input领域,然后在每个keydown(或者向上或者按),我将检索输入字段的值并使用String.prototype.indexOf()方法检查输入feild的值是否与任何当前表值的值匹配,只有匹配的值将显示,其余的显示会隐藏的。

好吧,在jQuery中所有上述逻辑都必须编程,但在angualar我实际上什么都不做,现在我的问题是关于keypress()事件,就像我在jQuery中说的那样就像一个关键的按压事件输入feild是必需的,但是这里根本没有按键事件,那么为什么每次按一个键,过滤都被激活了?谁能解释一下?

编辑:: 我发现了另一个例子,即每次点击元素时都会调用一个函数,即使没有ng-click甚至ng-model SEE FIDDLE ,现在为什么每次点击li并且活动状态发生变化时调用$ scope.total()方法?

1 个答案:

答案 0 :(得分:1)

它与Angular的ng-model指令有关。

https://docs.angularjs.org/api/ng/directive/ngModel

  

ngModel指令使用NgModelController将输入,select,textarea(或自定义表单控件)绑定到作用域上的属性,NgModelController由此指令创建并公开。

这与双向data-binding的概念有关。这是模型和视图之间的数据同步。

对视图所做的任何更改都会反映在模型和viceaversa中。