为什么要在angularjs到return相加数之和中创建一个函数?
Why is it necessary to create a function in angularjs to return sum of added numbers?
我在应用程序中使用 angularjs 有一段时间了,但突然间我完全迷失了 angular.
这种简单的虚幻本质
这是我的代码:
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
First Number: <input type="number" ng-model="firstNumber"><br>
Last Number: <input type="number" ng-model="secondNumber"><br>
<br>
Sum: {{result()}}
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.firstNumber = 0 ;
$scope.secondNumber = 0;
$scope.result = function() {
return $scope.firstNumber + $scope.secondNumber;
};
});
</script>
</body>
</html>
上面的代码工作正常,但我没有得到的是,对 {{result()}}
的调用更新了视图中的结果。这意味着,每次更改值时都会触发该函数。但据我所知,我希望以下代码能够正常工作,但事实并非如此。
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.firstNumber = 0 ;
$scope.secondNumber = 0;
$scope.result = $scope.firstNumber + $scope.secondNumber;
});
</script>
并且在视图中:
Sum : {{result}}
结果只显示初始结果即0,但不显示输入数字更改后的总和。
由于结果在范围上下文中,并且它的值应该在每次用户输入更改时发生变化,为什么总和值没有反映在视图中。
请帮忙!
这是因为您的结果具有不同的数据模型,而且您不必使用函数。您可以使用以下内容显示总和
First Number: <input type="number" ng-model="firstNumber"><br>
Last Number: <input type="number" ng-model="secondNumber"><br>
<br>
Sum: {{firstNumber + secondNumber}}
每次数据模型发生变化时,{{result()}} 也会被触发,您可能希望使用 $scope.$watch 或 ng-change 仅在数据模型发生变化时计算总和firstNumber 或 secondNumber.
显示的结果会随着它的模型在一个不断更新的函数中更新而改变。由于所有 JavaScript 语句作为控制器初始化的一部分仅执行一次,因此第一次评估结果,视图也是如此。但是当您更改值时,Angular 会使用输入字段中的值更新 firstNumber 和 secondNumber 的模型,仅此而已,因为我们没有告诉它在更改值时做任何事情,就像任何其他操作一样其他编程语言功能,JavaScript 和 Angular 都不会重新编译其控制器的所有 JavaScript 语句,因为它是控制器定义的一部分。
下一个问题一定是当我们写的时候会发生什么
{{ firstNumber + secondNumber }},是 Angular 不断评估这些模型及其相应视图的值(而不是添加这些数字的控制器定义中编写的 JavaScript 语句)。
angularjs 控制器中的每个函数只触发一次。
第一个技巧是在函数中使用 watch
$scope.result=function(){
return $scope.firstNumber + $scope.secondNumber;
$scope.$watchGroup(['firstNumber ', 'secondNumber'],
function(newValues, oldValues, scope) {
return newValues[0]+newValues[1]
});
}
第二个技巧是使用 ng-change 执行每个更改
First Number: <input type="number" ng-change="result()" ng-model="firstNumber"><br>
Last Number: <input type="number" ng-change="result()" ng-model="secondNumber"><br>
在控制器中:
$scope.result = function() {
return $scope.firstNumber + $scope.secondNumber;
};
我在应用程序中使用 angularjs 有一段时间了,但突然间我完全迷失了 angular.
这种简单的虚幻本质这是我的代码:
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
First Number: <input type="number" ng-model="firstNumber"><br>
Last Number: <input type="number" ng-model="secondNumber"><br>
<br>
Sum: {{result()}}
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.firstNumber = 0 ;
$scope.secondNumber = 0;
$scope.result = function() {
return $scope.firstNumber + $scope.secondNumber;
};
});
</script>
</body>
</html>
上面的代码工作正常,但我没有得到的是,对 {{result()}}
的调用更新了视图中的结果。这意味着,每次更改值时都会触发该函数。但据我所知,我希望以下代码能够正常工作,但事实并非如此。
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.firstNumber = 0 ;
$scope.secondNumber = 0;
$scope.result = $scope.firstNumber + $scope.secondNumber;
});
</script>
并且在视图中:
Sum : {{result}}
结果只显示初始结果即0,但不显示输入数字更改后的总和。
由于结果在范围上下文中,并且它的值应该在每次用户输入更改时发生变化,为什么总和值没有反映在视图中。
请帮忙!
这是因为您的结果具有不同的数据模型,而且您不必使用函数。您可以使用以下内容显示总和
First Number: <input type="number" ng-model="firstNumber"><br>
Last Number: <input type="number" ng-model="secondNumber"><br>
<br>
Sum: {{firstNumber + secondNumber}}
每次数据模型发生变化时,{{result()}} 也会被触发,您可能希望使用 $scope.$watch 或 ng-change 仅在数据模型发生变化时计算总和firstNumber 或 secondNumber.
显示的结果会随着它的模型在一个不断更新的函数中更新而改变。由于所有 JavaScript 语句作为控制器初始化的一部分仅执行一次,因此第一次评估结果,视图也是如此。但是当您更改值时,Angular 会使用输入字段中的值更新 firstNumber 和 secondNumber 的模型,仅此而已,因为我们没有告诉它在更改值时做任何事情,就像任何其他操作一样其他编程语言功能,JavaScript 和 Angular 都不会重新编译其控制器的所有 JavaScript 语句,因为它是控制器定义的一部分。
下一个问题一定是当我们写的时候会发生什么 {{ firstNumber + secondNumber }},是 Angular 不断评估这些模型及其相应视图的值(而不是添加这些数字的控制器定义中编写的 JavaScript 语句)。
angularjs 控制器中的每个函数只触发一次。
第一个技巧是在函数中使用 watch
$scope.result=function(){
return $scope.firstNumber + $scope.secondNumber;
$scope.$watchGroup(['firstNumber ', 'secondNumber'],
function(newValues, oldValues, scope) {
return newValues[0]+newValues[1]
});
}
第二个技巧是使用 ng-change 执行每个更改
First Number: <input type="number" ng-change="result()" ng-model="firstNumber"><br>
Last Number: <input type="number" ng-change="result()" ng-model="secondNumber"><br>
在控制器中:
$scope.result = function() {
return $scope.firstNumber + $scope.secondNumber;
};