将范围变量传递到ng-click中

时间:2014-09-17 20:20:10

标签: javascript angularjs

所以我知道我必须错过这个问题的javascript的一些基本部分,但无论如何它在这里:

我有一个在其中声明变量的控制器:

$scope.IsStartDatePickerHidden = true;
$scope.IsEndDatePickerHidden = true;

我有一个按钮,其ng-click设置为我的控制器中的一个功能。如果它接受一个可以改变值的参数,那么这个函数会很好:

<button type="button" ng-click="showDatePicker(IsStartDatePickerHidden)" >

 $scope.showDatePicker = function(showDatePicker)
 {
     showDatePicker = false;
 }

当我单步执行此代码时,函数showDatePicker会更改传入的参数的值,但似乎不会更改控制器中变量的值,因此没有任何反应。我确信这必须与通过引用传递有关。我只是不确定如何传递这个,以便$ scope.IsStartDatePickerHidden或$ scope.IsEndDatePickerHidden根据我传入的那个而改变。

2 个答案:

答案 0 :(得分:6)

布拉德的回答是正确的,但是如果你想要更通用的东西,那么你可以改变任何范围变量的值:

<button type="button" ng-click="showDatePicker('IsStartDatePickerHidden')" >

 $scope.showDatePicker = function(varName)
 {
     $scope[varName] = false;
 }

这不一定是好习惯,但通常很有用。说到这一点,你可以在ng-click中进行分配:

<button type="button" ng-click="IsStartDatePickerHidden = false" >

答案 1 :(得分:2)

如何修复该示例小提琴: http://jsfiddle.net/p3p6ova7/

如果您知道要在作用域上使用的变量,则无需传递这些值。在您的情况下,您正在功能中初始化一个新变量showDatePicker,并为其指定false,这对$scope.IsStartDatePickerHidden

没有任何影响

您也可以简单地执行ng-click="IsStartDatePickerHidden = false",但这可能是一种外部最佳做法。