在阅读Angular数据绑定时 - 遇到了建议 -
“由于JavaScript本身的性质以及它如何通过价值与 参考,它被认为是Angular中绑定的最佳实践 通过对象的属性引用视图,而不是 原始对象本身。“
来源:ng-book
问题: 1.它是什么意思 - 绑定引用而不是对象?
这附有代码段。
JS代码:
var module = angular.module("app", []);
//controller uses $timeout
module.controller("MyController", function ($scope, $timeout) {
var updateClock = function () {
$scope.clock = {};
$scope.clock.now = new Date();
$timeout(function () {
$scope.clock.now = new Date();
updateClock();
}, 1000);
};
updateClock();
})
HTML:
<body data-ng-app="app">
<div data-ng-controller="MyController">
<h5>Hello {{clock.now}}</h5>
</div>
</body>
问题:
2.如果我从$scope.clock.now = new Date();
外部删除此行$timeout
- 它不起作用。虽然clock.now
中正在为$timeout
分配日期对象。为什么呢?
答案 0 :(得分:1)
Q1:
select SW_lat, SW_lon, NE_lat, NE_lon, zone from tbl_zones where zone='west' OR zone='north
和范围上下文this
vs {{this.now}}
Q2:
以下是三个示例,我更喜欢{{clock.now}}
的语法,它使调试变得更容易:
Controller1
var module = angular.module("app", []);
module.controller("Controller1", function ($timeout) {
var vm = this
vm.clock = {now: 'its loading'};
vm.now = new Date();
var updateClock = function () {
$timeout(function () {
vm.clock.now = new Date();
updateClock();
}, 3000);
};
updateClock();
})
module.controller("Controller2", function ($scope, $timeout) {
$scope.clock = {now: 'its loading'};
$scope.now = new Date();
var updateClock = function () {
$timeout(function () {
$scope.clock.now = new Date();
updateClock();
}, 3000);
};
updateClock();
})
module.controller("Controller3", function ($timeout) {
var vm = this
var updateClock = function () {
$timeout(function () {
try {
vm.clock.now = new Date();
} catch(e){
vm.clock = {}
vm.clock.now = 'oops'
}
updateClock();
}, 3000);
};
updateClock();
})
另见:
答案 1 :(得分:1)
关于问题2:基本上如果你删除$ scope.clock.now = new Date();来自$ timeout回调之外的指令,在$ timeout服务触发的两个摘要周期之间,$ scope.clock实际上是
因此$ scope.clock.now变量在摘要时始终未定义。
从Updateclock函数执行开始到$ timeout service触发的摘要周期的详细执行步骤: