作为AngularJS的新手,根据我的有限经验,我对以下语法的理解是它在视图和模型之间建立了双向数据绑定,这意味着视图中的输入是否会更改模型更改以匹配AND副反之亦然。
<form ng-controller="StartUpController">
Starting: <input ng-change="computeNeeded()"
ng-model="funding.startingEstimate">
Recommendation: {{funding.needed}}
</form>
<script>
function StartUpController($scope) {
$scope.funding = { startingEstimate: 0 };
$scope.computeNeeded = function() {
$scope.needed = $scope.startingEstimate * 10;
};
}
</script>
然后我读到如果其他元素绑定到模型中的同一个变量,或者数据库可能更新模型,那么必须使用$ watch()以便视图更新。但从我的新手角度来看,这就是双向数据绑定已经在做什么。
<form ng-controller="StartUpController">
Starting: <input ng-model="funding.startingEstimate">
Recommendation: {{funding.needed}}
</form>
<script>
function StartUpController($scope) {
$scope.funding = { startingEstimate: 0 };
computeNeeded = function() {
$scope.funding.needed = $scope.funding.startingEstimate * 10;
};
$scope.$watch('funding.startingEstimate', computeNeeded);
}
有人可以为我澄清......非常感谢提前。
答案 0 :(得分:2)
如果这是您所拥有的确切代码,那么问题可能是您没有正确引用您的范围属性,而不是双向数据绑定不起作用。
您的脚本标记应为:
<script>
function StartUpController($scope) {
$scope.funding = {
startingEstimate: 0,
needed: 0
};
$scope.computeNeeded = function() {
$scope.funding.needed = $scope.funding.startingEstimate * 10;
};
}
</script>
编辑:为了进一步解释,您提供的两个代码示例(如果范围属性被正确引用)是等效的如果用户是唯一一个将更改值的人funding.startingEstimate
的。如果其他任何内容(如数据库更新等)可以更新该值,那么在该属性上使用$watch()
是每次更改时计算另一个值的唯一方法,无论是用户还是其他方式。 / p>