Angularjs 范围更新后视图未更新
下面是一个非常简单的例子,说明我正在尝试做什么Angularjs 范围更新后视图未更新,angularjs,Angularjs,下面是一个非常简单的例子,说明我正在尝试做什么 Athlete.save(athlete,function(result) { $scope.athlete = result.athlete; }); 问题是$scope.atternate变量在我的视图中没有更新。 为了让它更新,我必须这样做 Athlete.save(athlete,function(result) { $scope.athlete.fname = result.athlete.fname;
Athlete.save(athlete,function(result)
{
$scope.athlete = result.athlete;
});
问题是$scope.atternate变量在我的视图中没有更新。
为了让它更新,我必须这样做
Athlete.save(athlete,function(result)
{
$scope.athlete.fname = result.athlete.fname;
$scope.athlete.lname= result.athlete.lname;
$scope.athlete.gender= result.athlete.gender;
....
});
这很快就会让人恼火。
在第一段代码中,angular似乎不知道我的$scope.atternate变量已被更新。
这个函数是通过ng点击触发的,而不是一些jquery调用,据我所知,我是以角度的方式来实现的
这是我做的一个更简单的例子:
运动员={fname:'newfname',lname:'newlname'}
似乎正在创建一个名为atternate
的新局部变量,而不是更新正在传递的局部变量
处理此问题的更好方法是将运动员
的$index
传递给updateAttlete()
函数,并执行以下操作:
$scope.updateAthlete = function (index) {
$scope.athletes[index] = {
fname: 'new fname',
lname: 'new lname'
};
};
编辑:参见工作日志:参见以下答案:
原语通过值传递,对象通过“对象的副本”传递
参考”
具体来说,当您传递对象(或数组)时,您是(不可见的)
传递对该对象的引用,可以修改
该对象的内容,但如果尝试覆盖引用
它不会影响调用方持有的引用副本,即。
引用本身是通过值传递的
这就解释了为什么plunker不更新。但是,您的内联代码示例(使用
$scope.atternate=result.atternate
)似乎应该可以工作。您能创建一个显示失败的示例吗?我从这里得到了解决此问题的帮助:
有两种方法,一种是已经提到的,另一种是使用索引更新原始方法
第二种方法是使用angular.copy(source,destination)您所展示的很好…在plunker或JSFIDLE中创建简单的演示,复制问题,尝试在
$scope.$apply()
中包装。。。如果摘要已在处理中但值得一试,则将抛出ERORR。我制作了一个更简单的示例,该示例也存在问题。好的…第二个示例在您更改单个属性时起作用…所以现在的问题是atternate={fname:'new fname',lname:'new lname'}
似乎正在创建一个名为atternate
的新局部变量,而不是更新正在传递的局部变量。