Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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 视图中未更新角度范围变量_Javascript_Angularjs - Fatal编程技术网

Javascript 视图中未更新角度范围变量

Javascript 视图中未更新角度范围变量,javascript,angularjs,Javascript,Angularjs,初学者的角度问题。可能吧 为什么 //1 function setValue(target, value) { target = value; } setValue($scope.var1, 25); 不工作,但是 //2 function setValue(target, value) { $scope[target] = value; } setValue("var1", 25); 是吗 代码在控制器内部。我试图使我的代码更模块化,但我不赞成将变量作为字符串而不是引用传递

初学者的角度问题。可能吧

为什么

//1
function setValue(target, value) {
    target = value;
}
setValue($scope.var1, 25);
不工作,但是

//2
function setValue(target, value) {
    $scope[target] = value;
}
setValue("var1", 25);
是吗

代码在控制器内部。我试图使我的代码更模块化,但我不赞成将变量作为字符串而不是引用传递。我曾尝试向前者添加一个
$scope.$apply()
,正如其他地方向我建议的那样,但这在这里引发了一个错误


非常感谢Angularjs在
$scope
的值更改时更新其视图

根据你的第一个代码块

function setValue(target, value) {
    target = value; 
}
setValue($scope.var1, 25);
因为
$scope.var1
是一个字符串,所以在这里它将按值传递,&当您更新目标变量时,
$scope
保持不变,这就是它没有被更改的原因

在第二个代码块中

function setValue(target, value) {
    $scope[target] = value;
}
setValue("var1", 25);

在这里,您直接更改
$scope
以便更新视图。

在javascript中,对象是通过值传递的,而不是通过引用传递的。目标和值参数是函数的局部变量,在函数调用完成后,更改将不会反映出来(如果您希望发生这种情况).这就是我期望发生的:)我现在明白了,我在//1中所做的一切就是重新分配变量
target
,该变量最初具有
$scope.var1
的值,将其赋值为
25
,但这不会改变
$scope.var1
本身的值。谢谢你的澄清。啊,我明白了。因此,我不能传递对变量或对象的引用,以便在其他地方对其进行更改;只能更改其属性。实际上,我在这里找到了一个很好的解释:因此,如果我想更改
$scope.var1
的值,我可以(a)编写一个返回该值的函数并将其用作:
$scope.var1=setValue(…)
,(b)硬编码函数中的更改:
函数setValueVar1(value){$scope.var1=value;}
,或者(c)做我的第二个函数并传递名称…对吗?你不是在传递引用你是在传递字符串&字符串不是通过引用@ElRudiOne传递的-你写“因为
$scope.var1
是一个字符串”--但这不是无关紧要的吗?实际上我们不知道
$scope.var1
是什么;它可能是一个对象,行为也会是一样的,对吗?@ElRudi它不是,如果它是一个对象,它将通过引用传递,因此,有些事情可能会让人惊讶。如果它是一个对象,我只能使用
target.prop1=…
之类的东西来更改对象的属性,才能进行“持久”更改——据我所知,我永远无法用
target=…
替换整个对象。谢谢你的回答!