双向绑定更新了哪些部分?
Which parts does two way binding updates?
假设我在具有 SortBy 模型的控制器中有以下数组。
var empsColl = [
{ 'firstName': 'Donney', 'gender': 'male', DOB:new Date("November 20, 1978"), salary1:12000, salary2:12000 },
{ 'firstName': 'Obama', 'gender': 'male', DOB: new Date("April 10, 1980"), salary1: 40000, salary2: 40000 },
{ 'firstName': 'Jeb', 'gender': 'male', DOB: new Date("May 20, 1990"), salary1: 120000, salary2: 120000 },
{ 'firstName': 'Xing', 'gender': 'male', DOB: new Date("May 3, 1990"), salary1: 12, salary2: 12 },
{ 'firstName': 'Dillon', 'gender': 'male', DOB: new Date("May 3, 1990"), salary1: 6000, salary2: 6000 }
];
$scope.Employees = empsColl;
$scope.SortBy = 'firstName';
在视图中,我在两个地方使用了双向绑定,一个在 <select ng-model="SortBy">
中,一个在 <div>{{SortBy}}</div>
中的表达式绑定中
我当然知道模型更新会更新表达式绑定部分,但它会重新更新 <select>
中选择的选项吗?
在幕后发生的事情是,angular 收集所有视图级别 bindings
、binding directives
、ng-model
、$watch expression
等。并将其放入 $scope
的 $$watchers
对象中。其中包含所有观察者数组。
当 Angular 运行 更新绑定的摘要周期结束时,它通过对模型应用脏检查来重新评估每个观察者表达式(在每个摘要周期)。如果模型 newValue !== oldValue
那么只有它更新一个绑定。否则更新将被跳过。
假设我在具有 SortBy 模型的控制器中有以下数组。
var empsColl = [
{ 'firstName': 'Donney', 'gender': 'male', DOB:new Date("November 20, 1978"), salary1:12000, salary2:12000 },
{ 'firstName': 'Obama', 'gender': 'male', DOB: new Date("April 10, 1980"), salary1: 40000, salary2: 40000 },
{ 'firstName': 'Jeb', 'gender': 'male', DOB: new Date("May 20, 1990"), salary1: 120000, salary2: 120000 },
{ 'firstName': 'Xing', 'gender': 'male', DOB: new Date("May 3, 1990"), salary1: 12, salary2: 12 },
{ 'firstName': 'Dillon', 'gender': 'male', DOB: new Date("May 3, 1990"), salary1: 6000, salary2: 6000 }
];
$scope.Employees = empsColl;
$scope.SortBy = 'firstName';
在视图中,我在两个地方使用了双向绑定,一个在 <select ng-model="SortBy">
中,一个在 <div>{{SortBy}}</div>
我当然知道模型更新会更新表达式绑定部分,但它会重新更新 <select>
中选择的选项吗?
在幕后发生的事情是,angular 收集所有视图级别 bindings
、binding directives
、ng-model
、$watch expression
等。并将其放入 $scope
的 $$watchers
对象中。其中包含所有观察者数组。
当 Angular 运行 更新绑定的摘要周期结束时,它通过对模型应用脏检查来重新评估每个观察者表达式(在每个摘要周期)。如果模型 newValue !== oldValue
那么只有它更新一个绑定。否则更新将被跳过。