AngularJs $watchcollection
我们将介绍 AngularJs 的观察器以及我们可以使用 AngularJs 完成的观察器的类型。
AngularJs 观察器和它的工作原理
观察器只是跟踪范围变量及其值的变化。观察器监视范围变量以及范围变量内可用值的变化。
为了详细了解观察器,我们来看一个例子。让我们使用与控制器 a
关联的 div
创建一个与控制器相关的标记。
这个 div
将有两个元素,一个是文本框,另一个是 div。如下所示,文本框将双向绑定到 x
,而 div 将单向绑定到 y
。
# angular
<div ng-controller="a">
<input ng-model="x">
<div>{{b}}</div>
</div>
我们的控制器 a
将定义三个范围变量 x
、y
和 z
。如下所示,我们为这三个变量赋值为 1、2 和 3。
# angular
app.controller("a", function(){
$scope.x = 1;
$scope.y = 2;
$scope.z = 3;
})
首先,让我们讨论一下观察器是如何工作的。Watch 跟踪变量及其值。所以我们有一个使用 ng-model
绑定到文本框的范围变量 x
。这意味着完成了双向绑定。
每当我们将数据绑定到范围变量时,将自动创建一个监视变量,AngularJs 框架将处理该变量。每当我们有一些数据绑定到作用域变量时,所有这些变量都会有它们各自的观察器由 AngularJs 自动创建。
在上面的示例中,我们有两个元素,它们具有一些数据绑定到两个不同的范围变量和在内存中创建的两个不同的观察器。
有些变量没有被监视,因为它们没有与任何元素绑定。从上面的例子中,变量 z
没有被观察,并且没有为变量 z
自动创建观察器。
AngularJs 根据数据绑定的概念自行决定是否监视特定变量。
AngularJs 可以基于观察器或每当范围变量的值发生变化时执行我们的自定义函数。如果 x
的值发生变化,我可以创建一个可以执行的自定义函数。
在 AngularJs 中使用 $watchCollection
观察集合的变化
AngularJs 1.1.4 引入了一种新方法来观察和观察集合中的变化,无论是作为数组还是对象。
$watchCollection()
用于将某些内容推送到集合或从集合中删除某些元素。 $watchCollection()
可以返回新的和以前的集合。
让我们创建一个示例来了解如何使用 $watchCollection()
。
我们将向集合中添加一本书,从该集合中删除一本书,从集合中更改该书以检查 $watchCollection()
如何对所有这些函数作出反应。
# angular
var myApp = angular.module('myApp',[]);
myApp.controller('watchCollectionExample', function($scope) {
$scope.Books = [{
Id : 1,
Name: 'Programming With Husnain'
}];
$scope.AddItem = function() {
$scope.Books.push({
Id : $scope.Books.length + 1,
Name: 'Programming With Husnain ' + $scope.Books.length
});
}
$scope.RemoveItem = function() {
$scope.Books.pop(1);
}
$scope.ModifyItem = function() {
$scope.Books[0].Name = 'Coding Basics';
}
$scope.$watchCollection('Books', function(newCollection, oldCollection){
$scope.newValue = newCollection;
$scope.oldValue = oldCollection;
$scope.Itemslog.splice(0, 0, "Updated at " + (new Date()).getTime());
});
$scope.Itemslog = [];
$scope.LogClear = function(){
$scope.Itemslog.length = 0;
}
});
现在让我们创建一个模板。
# angular
<div ng-controller="watchCollectionExample">
<b>Books:</b> {{Books}} <br/><br/>
<b>New Books:</b> {{newValue}} <br/>
<b>Old Books:</b> {{oldValue}}
<br/><br/>
<button ng-click="AddItem()">Add Book to Collection</button>
<button ng-click="RemoveItem()">Remove Book from Collection</button>
<button ng-click="ModifyItem()">Change Book Item Value in Collection</button>
<button ng-click="LogClear()">Clear Log</button>
<ul>
<li ng-repeat="book in Itemslog"> {{ book }} </li>
</ul>
</div>
输出:
相关文章
在 Angular 中上传文件
发布时间:2023/04/14 浏览次数:71 分类:Angular
-
本教程演示了如何在 Angular 中上传任何文件。我们还将介绍如何在文件上传时显示进度条,并在上传完成时显示文件上传完成消息。
Angular 中所有 Mat 图标的列表
发布时间:2023/04/14 浏览次数:91 分类:Angular
-
本教程演示了在哪里可以找到 Angular 中所有 Mat 图标的列表以及如何使用它们。
Angular 2 中的复选框双向数据绑定
发布时间:2023/04/14 浏览次数:139 分类:Angular
-
本教程演示了如何一键标记两个复选框。这篇有 Angular 的文章将着眼于执行复选框双向数据绑定的不同方法。
在 AngularJS 中重新加载页面
发布时间:2023/04/14 浏览次数:142 分类:Angular
-
我们可以借助 windows.location.reload 和 reload 方法在 AngularJS 中重新加载页面。
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 AngularJS 中启用 HTML5 模式
发布时间:2023/04/14 浏览次数:150 分类:Angular
-
本文讨论如何在 AngularJS 应用程序上启用带有深度链接的 HTML5 模式。
在 AngularJs 中加载 spinner
发布时间:2023/04/14 浏览次数:107 分类:Angular
-
我们将介绍如何在请求加载时添加加载 spinner,并在 AngularJs 中加载数据时停止加载器。
在 Angular 中显示和隐藏
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程演示了 Angular 中的显示和隐藏。在开发商业应用程序时,我们需要根据用户角色或条件隐藏一些数据。我们必须根据该应用程序中的条件显示相同的数据。
在 Angular 中下载文件
发布时间:2023/04/14 浏览次数:104 分类:Angular
-
本教程演示了如何在 angular 中下载文件。我们将介绍如何通过单击按钮在 Angular 中下载文件并显示一个示例。