我的问题与我重构的指令有关:
HTML
<!-- Before -->
<slider value="sliderValue" floor="0" ceil="maxPrice"></slider>
<!-- New version -->
<slider value="sliderValue" options="sliderOptions"></slider>
<!-- Both directives use '=' bindings... -->
JS
$scope.sliderValue=0;
$scope.maxPrice = 1000;
$scope.sliderOptions = {
floor: 0,
ceil: $scope.maxPrice
};
//later
$scope.maxPrice = 2000;
使用旧版本,我可以更新$scope.maxPrice
,它会自动更新指令中ceil
的范围值。我希望在新版本中实现相同的目标。
我想到的第一个想法就是在$watch
上使用$scope.maxPrice
,但我读过许多人解释说使用$watch
是一种不好的做法。
然后,我每次更新$scope.sliderOptions.ceil
时都可以手动更新$scope.maxPrice
,但这非常烦人。
N.B。 $scope.maxPrice
是应用程序的多个位置使用的业务逻辑值,而$scope.sliderOptions
仅用于滑块指令。
答案 0 :(得分:0)
在给出一些思考和讨论后,我猜你只能将maxprice
包装在一个简单的对象中。之所以这样做是因为JavaScript无法通过引用传递数字。有关该主题的更多信息:
Is there thing like pass by value pass by reference in JavaScript?
提议的解决方案
$scope.sliderValue=0;
$scope.maxPrice = {value: 1000};
$scope.sliderOptions = {
floor: 0,
ceil: $scope.maxPrice
};
//later
$scope.maxPrice.value = 2000;