Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ng click和函数设置变量之间的角度差_Javascript_Angularjs_Angularjs Ng Click - Fatal编程技术网

Javascript 使用ng click和函数设置变量之间的角度差

Javascript 使用ng click和函数设置变量之间的角度差,javascript,angularjs,angularjs-ng-click,Javascript,Angularjs,Angularjs Ng Click,这是我已经运行过几次的东西 假设我的控制器中有以下变量: $scope.valueArr = ['Hello', 'No', 'Yes']; $scope.myValue = 'Hello'; 我重复以下几点: 在我的控制器中添加以下功能: $scope.setMyValue = function(value){$scope.myValue = value} 然后,它删除旧的类,只将活动类添加到最后按下的li 因此,在控制器中没有函数的情况下,它似乎不是重新招标。谁能告诉我为什么?当你应该选

这是我已经运行过几次的东西

假设我的控制器中有以下变量:

$scope.valueArr = ['Hello', 'No', 'Yes'];
$scope.myValue = 'Hello';
我重复以下几点:

在我的控制器中添加以下功能:

$scope.setMyValue = function(value){$scope.myValue = value}
然后,它删除旧的类,只将活动类添加到最后按下的li

因此,在控制器中没有函数的情况下,它似乎不是重新招标。谁能告诉我为什么?当你应该选择一个而不是另一个的时候


请注意,这只是许多没有重新招标的例子之一

ng repeat为每个重复的元素创建一个新的子范围。所以当你写作的时候

<a ng-click="myValue = value"> </a>
当用户单击按钮时,您正在的子范围上创建新变量“myValue”。这会隐藏父作用域上的“myValue”值,但不会更改它-因此所有其他作用域仍然从父作用域继承“myValue”值

然而,当你写作的时候

<a ng-click="setMyValue(value);"> </a>

您正在引用父作用域上定义的函数setMyValue。因此,当用户单击该按钮时,将执行setMyValue函数,并在父作用域上设置“myValue”。未触及子作用域。由于父作用域上的值已更改,因此所有元素都将继承它。

ng repeat为每个重复的元素创建一个新的子作用域。所以当你写作的时候

<a ng-click="myValue = value"> </a>
当用户单击按钮时,您正在的子范围上创建新变量“myValue”。这会隐藏父作用域上的“myValue”值,但不会更改它-因此所有其他作用域仍然从父作用域继承“myValue”值

然而,当你写作的时候

<a ng-click="setMyValue(value);"> </a>
您正在引用父作用域上定义的函数setMyValue。因此,当用户单击该按钮时,将执行setMyValue函数,并在父作用域上设置“myValue”。未触及子作用域。由于父作用域上的值已更改,因此所有元素都将继承该值。

这是因为ng repeat创建了一个子作用域来引用

这意味着每次重复都有一个单独的范围

第一次重复有一个单独的子作用域

第二次重复有一个单独的子作用域

第三次重复有一个单独的子范围

。。。像智者一样

因此,如果您在repeat的子作用域中以ng click=myValue=value角度搜索的形式访问变量myValue,并且在意识到没有名为myValue的变量或没有任何其他可访问的引用之后,请在子作用域上创建myValue。如何使用$parent.myValue访问父作用域

检查

另一种方法是使用如下对象:

$scope.tempObj = {myValue : 'Hello'};
并使用

<a ng-click="tempObj.myValue = value">
&

在setMyValue函数中,它使用$scope.myValue,它位于控制器作用域中,而不在repeat的子作用域中。

这是因为ng repeat创建了一个子作用域

这意味着每次重复都有一个单独的范围

第一次重复有一个单独的子作用域

第二次重复有一个单独的子作用域

第三次重复有一个单独的子范围

。。。像智者一样

因此,如果您在repeat的子作用域中以ng click=myValue=value角度搜索的形式访问变量myValue,并且在意识到没有名为myValue的变量或没有任何其他可访问的引用之后,请在子作用域上创建myValue。如何使用$parent.myValue访问父作用域

检查

另一种方法是使用如下对象:

$scope.tempObj = {myValue : 'Hello'};
并使用

<a ng-click="tempObj.myValue = value">
&


在setMyValue函数中,它使用$scope.myValue,它位于控制器作用域中,不在repeat的子作用域中。

javascript对象很奇怪。有一条关于角度应用的一般性建议,它总是使用一个点。通过始终使用点,您将处理对象属性,这在绑定时非常有用。有时绑定到原语会变得非常奇怪。看到了吗,javascript对象很奇怪。有一条关于角度应用的一般性建议,它总是使用一个点。通过始终使用点,您将处理对象属性,这在绑定时非常有用。有时绑定到原语会变得非常奇怪。看这个,关于没有变量的部分是错误的。如果它存在于控制器作用域中,则它将位于子作用域中。但是它是一个原语,没有继承为什么它不为子范围创建一个新对象,就像它为子范围创建一个新变量一样?@User2检查这个答案关于没有变量的部分是错误的。如果它存在于控制器作用域中,则它将位于子作用域中。但是它是一个原语,没有继承性为什么它不为子范围创建一个新对象,就像它为子范围创建一个新变量一样?@User2检查这个答案
$scope.setMyValue = function(value){$scope.myValue = value}