AngularJS:更改对象不更新字段,但直接更改字符串

时间:2015-01-14 20:32:27

标签: javascript angularjs

我觉得这是微不足道的,但我已经被困住了一段时间。

我有一个对象user,在指令UserSettings中设置。该指令的元素包含一个带有html {{user.name}}的按钮,用于打开用户设置的模型。页面加载user.name时设置。

模态中的用户设置表单由名为UserSettingsForm的控制器包含。我一直在尝试调试控制器,我对我看到的行为感到困惑。

console.log @$scope.user # debug to show user object is there
@$scope.test = angular.copy(@$scope.user) # set test equal to a copy of user
@$scope.test.name = 'wowee' # change test object's 'name' property
@$scope.user = angular.copy(@$scope.test) # set user back to test
console.log @$scope.test # test is changed
console.log @$scope.user # user is equivalent to test

上述调试按预期工作,但意外部分(至少对我而言)是导航栏中的{{user.name}}未更新的事实。但是当我@$scope.user.name = @$scope.test.name时,HTML中的{{user.name}}字段会更新。

我确实是一个有角度的菜鸟(即使这可能是一个JavaScript概念),但我遇到麻烦的逻辑对我来说没有意义,如果有人能为我清理它,我会非常感激并且甚至可以向我推进正确的方向,只要正确地将user对象更新为等于test对象。 test最终将成为用户设置表单的一个实例,只有在成功保存数据时,该实例才会保存为user

1 个答案:

答案 0 :(得分:1)

即使你做了改变,Angular仍在观看之前的参考文献。

如果您使用:

angular.copy(source, destination)

它将删除所有以前的属性,并用源属性替换它们。

以下是您案例的更新示例:

angular.copy($scope.test, $scope.user)

该陈述应解决问题。