Javascript 调用从AngularJS表达式本地计算值的函数是否非常糟糕?
我已经读过了,它声明不应该在表达式中使用函数,我理解每次框架认为需要表达式时(这种情况可能会经常发生),都可能会对表达式进行求值,反复调用昂贵的函数将是低效的。但是,如果该函数仅根据已加载到范围中的值进行一些计算,该怎么办?例如,假设我有一个具有3个不同属性的作用域,并且一些状态由这些属性的值的组合决定。我可以在函数中计算该状态:Javascript 调用从AngularJS表达式本地计算值的函数是否非常糟糕?,javascript,html,angularjs,angularjs-scope,Javascript,Html,Angularjs,Angularjs Scope,我已经读过了,它声明不应该在表达式中使用函数,我理解每次框架认为需要表达式时(这种情况可能会经常发生),都可能会对表达式进行求值,反复调用昂贵的函数将是低效的。但是,如果该函数仅根据已加载到范围中的值进行一些计算,该怎么办?例如,假设我有一个具有3个不同属性的作用域,并且一些状态由这些属性的值的组合决定。我可以在函数中计算该状态: $scope.state = function() { return prop1 && prop2 && prop3; };
$scope.state = function() {
return prop1 && prop2 && prop3;
};
并从表达式中调用该函数。另一种方法是在每次更改每个属性时调用该函数,以便缓存状态值:
$scope.prop1 = someValue;
$scope.state = getState();
...
$scope.prop2 = someOtherValue;
$scope.state = getState();
...
$scope.prop3 = yetAnotherValue;
$scope.state = getState();
在这种情况下,直接从表达式调用函数真的那么糟糕吗?如果是这样,是否是缓存计算值的唯一替代方法,可能在许多不同的位置,或者是否缺少其他方法?一个选项是在状态条件下设置
$watch
<代码>$watch可以获取函数参数,因此您可以执行以下操作:
$scope.$watch(function(){
return $scope.prop1 && $scope.prop2 && $scope.prop3;
},function(val){
$scope.state = val;
});
一个选项是在状态条件下设置
$watch
<代码>$watch可以获取函数参数,因此您可以执行以下操作:
$scope.$watch(function(){
return $scope.prop1 && $scope.prop2 && $scope.prop3;
},function(val){
$scope.state = val;
});
不,没那么糟
在表达式中不使用函数会导致HTML因内联javascript而膨胀
考虑一下这段代码的优雅:
需要名字!
...
姓是必需的!
...
电子邮件是必需的!
与此相比:
需要名字!
...
姓是必需的!
...
电子邮件是必需的!
函数Ctrl($scope){
$scope.isInvalid=函数(字段){
返回($scope.form[field].$dirty | |$scope.submitted)和&$scope.form[field].$error.required;
};
$scope.submit=函数(){
$scope.submitted=true;
//$http.post。。。
}
}
即使是在表达式中使用函数的作者
表达式中的函数在Angular中是受欢迎的,但有以下前瞻性:
需要名字!
...
姓是必需的!
...
电子邮件是必需的!
与此相比:
需要名字!
...
姓是必需的!
...
电子邮件是必需的!
函数Ctrl($scope){
$scope.isInvalid=函数(字段){
返回($scope.form[field].$dirty | |$scope.submitted)和&$scope.form[field].$error.required;
};
$scope.submit=函数(){
$scope.submitted=true;
//$http.post。。。
}
}
即使是在表达式中使用函数的作者
表达式中的函数在Angular中是受欢迎的,但有以下前瞻性:
我不知道你可以用
$watch
来做这件事。美好的我不知道你可以用$watch
来做这件事。美好的基本上概括了我的想法。谢谢基本上概括了我的想法。谢谢