AngularJS-对象分配不起作用
AngularJS - Object assignment does not work
下午好,
我有一个关于AngularJS的问题:
在我的html模板中有一个按钮:
<button class="btn btn-default" ng-click="updateData(testVar)">do it</button>
如果单击该按钮,将触发一个函数,该函数将更新传递的$scope变量。
该变量具有以下结构:
$scope.testVar =
{
id: 1,
name: 'angular',
obj:
{
obj1: 'object1',
obj2: 'object2'
}
};
这是我更新$scope变量的函数:
$scope.updateData = function(param)
{
param = getData();
}
function getData()
{
return {
id: 2,
name: 'test',
obj:
{
obj1: 'object3',
obj2: 'object4'
}
};
}
然而,我的问题是,在函数完成后,$scope变量仍然具有与以前相同的值。
如果我只更新变量的一个属性,它会起作用:
param.name = getData().name;
我不明白这是怎么回事。如果有人能为我解释这个过程,我会很高兴。
您将用新对象替换param
的引用,而不是分配给$scope.testVar
。改为:
$scope.updateData = function() {
$scope.testVar = getData();
};
这是因为您只是简单地将一个引用交换为另一个引用。$scope
指向的原始引用是旧对象。
更新单个属性时,param
和$scope.testVar
仍然指向同一个对象,因此它可以按预期工作。
对此进行一点扩展,如果我们在更详细的运行时语言中写出来:
控制器初始化时:
- 在对象
$scope
上创建一个名为testVar
的属性 - 在堆
{...}
上创建一个对象,并将其引用分配给$scope.testVar
当您的功能运行时:
- 在作用域上获取对
testVar
的引用,并将其传递到函数updateData()
中,局部变量名为param
- 执行
testData()
并在堆{...}
上创建一个新对象 - 将对新对象的引用指定给局部变量
param
param
现在指向堆上的新对象,而$scope.testVar
仍然指向初始化时的同一对象
[只为子孙后代]
updateData()
执行完毕,param
弹出堆栈- 垃圾收集器发现没有任何东西指向
testData()
创建的对象,并通过释放它占用的内存将其从堆中删除
您只是在函数范围内更新param值,您需要通过$root.testData=getData()更新它;
相关文章:
- 将数组的拼接分配给自身时,Javascript控制台打印不起作用
- 将变量分配给函数在JavaScript中不起作用
- 将 jQuery 函数分配给变量不起作用,但包装它不起作用
- AngularJS-对象分配不起作用
- 对象分配在此angularjs控制器中不起作用
- Javascript:分配给对象或数组原型会导致括号不起作用
- 分配属性值在猫鼬中不起作用
- Web套接字在分配给全局变量时不起作用
- Javascript:为在MS Edge中不起作用的其他框架中的输入框分配值
- 挖空值分配不起作用
- 为函数中的现有数组(全局变量)分配新值不起作用.为什么
- 嵌套的 if/else 语句讨论了分配变量.我已经这样做了,但它仍然不起作用
- 使用 Jquery 分配事件在 Firefox 中不起作用
- 分配随机 ID 不起作用
- 猫鼬对象字段分配不起作用
- 解构并分配给新变量,同时不起作用
- JQuery方法获胜'分配给这个变量后不起作用
- Onclick函数分配不起作用
- jQuery:动态分配的函数不起作用
- JSON字符串分配不起作用