我基本上是从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()方法?
答案 0 :(得分:1)
它与Angular的ng-model
指令有关。
https://docs.angularjs.org/api/ng/directive/ngModel
ngModel指令使用NgModelController将输入,select,textarea(或自定义表单控件)绑定到作用域上的属性,NgModelController由此指令创建并公开。
这与双向data-binding
的概念有关。这是模型和视图之间的数据同步。
对视图所做的任何更改都会反映在模型和viceaversa中。