保持对象属性链接到值的最佳方法是什么?

时间:2015-11-24 07:20:14

标签: javascript angularjs

我的问题与我重构的指令有关:

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仅用于滑块指令。

1 个答案:

答案 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;