angular js:为什么$scope.product如果是变量就不更新,如果是函数就不更新
angular js: why $scope.product do not update if it is a variable and update if it is a function
我是angular js的新手。我发现了一个问题,但我不知道为什么。有人能为我解释一下吗?非常感谢。
下面是我的html文件:
<div ng-controller="index">
<input type="text" ng-model="factor" /> {{product}}
</div>
下面是我的js文件:
angular.module("root", [])
.controller("index", ["$scope", function($scope) {
$scope.factor = 6;
$scope.product = $scope.factor * 2;
}]);
当我将输入更改为5时,乘积值不会像预期的那样更新为10。
但如果我像下面这样更改代码,产品价值会在我更改输入后立即更新
html:
<div ng-controller="index">
<input type="text" ng-model="factor" /> {{product()}}
</div>
js:
angular.module("root", [])
.controller("index", ["$scope", function($scope) {
$scope.factor = 6;
$scope.product = function(){
return $scope.factor * 2
};
}]);
在第一种情况下,初始化了$scope
字段。就是这样。字段product
是使用字段factor
的值初始化的,但字段是独立的。
在第二种情况下,您定义了$scope
函数product
,其返回值取决于$scope
字段factor
,因此$scope.factor
的任何更改都会导致$scope.product
返回值的更改。
当呈现页面时,乘积是12,因为6*2是12。尽管您对因子有双向绑定,但将因子*2分配给乘积的代码不会再次执行。
正如中的注释所建议的那样,您应该设置一个ng更改事件并执行$scope.product=$scope.factor*2;如果您更改了因子,应该会重新绑定页面。
product()之所以有效,是因为每次对表单进行更改时,都会执行函数。这是非常有效的,因为如果你有其他字段,产品功能仍然运行,这可能不是你想要的。
试试这个:
HTML:
<div ng-controller="index">
<input type="text" ng-change="factorChanged()" ng-model="factor" /> {{product}}
</div>
JS:
angular.module("root", [])
.controller("index", ["$scope", function($scope) {
$scope.factorChanged = function() {
$scope.product = $scope.factor * 2;
};
$scope.factor = 6;
$scope.factorChanged();
}]);
最好的方法是使用$watch,请检查这个plunker
app
.controller("index", ["$scope", function($scope) {
$scope.factor = 6;
$scope.$watch('factor',function(newValue,oldValue){
$scope.product = newValue *2;
});
}]);
相关文章:
- 如何检查Json文件更新,如果更新了,则用更新的数据刷新我的页面
- JSON:loop Invoice Items:如果InvoiceNo未退出则添加,如果退出则更新值,示例包括在内
- 如果我不应该在组件WillUpdate中调用setState,如何更新状态(使用ReactJS)
- 如果在线检查期间发生电源故障,我们如何更新用户再次登录门户时的剩余时间
- ng,如果没有捕获更新的$scope值
- 如果在DIV的底部,JQuery会更新
- 如何使用Passport.js本地策略检查当前密码并(如果正确)更新密码
- 检查文档是否已经存在,如果是则更新,否则创建新的Mongoose
- 从数组中删除值,用新的数组总数更新html或'$'如果没有总计
- 表单在每个页面中 - 仅在特定页面上处理它 - 如果当前不在页面上 - 重定向 - 否则 - 使用 AJAX 更新数据
- jQueryAjax SQL-如果我在多个用户上单击编辑,则Ajax会更新我单击的所有内容.不是最后一个点击
- 如果选择/下拉列表发生更改,则Mysql会更新
- 如果正在创建或更新项目,请在模型“validate”内部进行区分
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 如果HTML文件已更新,则执行JavaScript 2
- 如果值为true,AngularJS将更新ng模型
- 检查第 n 个子项是否存在,如果没有,则创建并更新
- 如果源 json 已更新(添加或删除项目),则动态更新 D3 旭日
- 如果外部应用程序更改了持久模型(服务器数据库),AngularJS 是否可以自动更新视图
- 在MongoDB中查询数组中的数组;更新如果存在,插入如果为空