为什么$scope成员被访问三次
Why does the $scope member being accessed thrice
以下是我的代码:
"use strict";
var App = angular.module('SampleApp', []);
App.controller('EmpCtrl', ['$scope', 'EmpCalcSvc', function ($scope, EmpCalcSvc) {
$scope.Empno = 1001;
$scope.Ename = "Test";
$scope.Sal = 4500;
$scope.Deptno = 20;
$scope.GetAnnSal = function () {
return EmpCalcSvc.GetAnnSal($scope.Sal);
};
}]);
App.service('EmpCalcSvc', function() {
this.GetAnnSal = function (salary) {
console.log(salary);
return salary * 12;
};
});
<html ng-app="SampleApp">
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body>
<div ng-controller="EmpCtrl">
<table>
<tr>
<td width="150px">Employee Id:</td>
<td>{{Empno}}</td>
</tr>
<tr>
<td>Name:</td>
<td>{{Ename}}</td>
</tr>
<tr>
<td>Salary:</td>
<td><input type="text" ng-model="Sal"/></td>
</tr>
<tr>
<td>Department:</td>
<td>{{Deptno}}</td>
</tr>
<tr>
<td>Annual Salary:</td>
<td>{{GetAnnSal()}}</td>
</tr>
</table>
</div>
</body>
</html>
如果我修改文本框中的值,$scope。GetAnnSal被处决三次!
我在这里错过了什么来让它只执行一次?
或者,我对这里的概念的理解是根本错误的吗?
提前谢谢。
问题出在<td>{{GetAnnSal()}}</td>
行。Angular 将在每个摘要周期中执行此函数。最好在插值中放置一个范围变量而不是函数。
检查这个跳槽。我将函数调用 GetAnnSal() 放在 ng-change 中并在插值指令中设置评估值的地方。
做一个简单的ng-change,你就完成了。无需在 td 中调用该函数,因为它将被$watched。
"use strict";
var App = angular.module('SampleApp', []);
App.controller('EmpCtrl', ['$scope', 'EmpCalcSvc', function ($scope, EmpCalcSvc) {
$scope.Empno = 1001;
$scope.Ename = "Test";
$scope.Sal = 4500;
$scope.Deptno = 20;
$scope.GetAnnSal = function () {
$scope.computedSalary = EmpCalcSvc.GetAnnSal($scope.Sal);
//return EmpCalcSvc.GetAnnSal($scope.Sal);
};
}]);
App.service('EmpCalcSvc', function() {
this.GetAnnSal = function (salary) {
console.log(salary);
return salary * 12;
};
});
<html ng-app="SampleApp">
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body>
<div ng-controller="EmpCtrl">
<table>
<tr>
<td width="150px">Employee Id:</td>
<td>{{Empno}}</td>
</tr>
<tr>
<td>Name:</td>
<td>{{Ename}}</td>
</tr>
<tr>
<td>Salary:</td>
<td><input type="text" ng-model="Sal" ng-change="GetAnnSal(Sal)"/></td>
</tr>
<tr>
<td>Department:</td>
<td>{{Deptno}}</td>
</tr>
<tr>
<td>Annual Salary:</td>
<td>{{computedSalary}}</td>
</tr>
</table>
</div>
</body>
</html>
相关文章:
- socket.io发射三次
- 使用流星调用时,可以多次访问流星中的某个函数
- 每5次访问后更改链接URL
- SVG实现的单调三次插值没有像d3这样的库
- readyState=4三次.Ajax-由警报引起
- Raphael悬停事件和调整大小框在第三次鼠标悬停后发生故障
- Javascript拉斐尔奇怪的闪烁发生在我鼠标悬停的第三次
- 如何在第二次访问页面时激活javascript
- Ajax请求三次都不起作用,然后就起作用了
- 弹出循环:添加数据时停止重复/三次应用/X
- 如何让onclick第三次做一些不同的事情
- 在第三次onPageClick事件后,使用twbspagination插件和AJAX更新JS分页
- 如何使用PhantomJS连续多次访问页面
- FancyBox iframe在第三页访问后打开
- ajax表单在第二次提交时提交了两次,在第三次提交时又提交了三次,等等
- 使插值双三次函数在ie9中工作
- 为什么$scope成员被访问三次
- 了解三次插值的实现
- HTML5 音频自动播放仅适用于前 3 次访问/加载网站
- 如何从两次或三次嵌套的ng-repeat作用域访问控制器的作用域