http调用后,Angularjs更新模型失败

时间:2015-11-19 04:12:10

标签: angularjs

我有一组帐户,例如[{username: xxx, password: xxx} , ....],然后我将它们打印到下面的页面,

<tr ng-repeat = 'account in accounts'>
   <td>{{account.username}}<td>
   <td>{{account.password}}<td>
   <td><button ng-click='ResetPassword(account)'>Reset</button></td>
</tr>

ResetPassword() func,

$scope.ResetPassword = function(account){
        $http.post('/reset/password/'+account.username).success(function(rAccount){

            account = rAccount; //account & rAccount have the same structure.
         }
    });
};

问题如果我覆盖account=rAccount,密码用户界面从未更新过,除非我像account.password = rAccount.password一样手动设置属性,请参阅此JSFIDDLE < / p>

那么,为什么它不能通过obj overriding工作?那怎么解决呢?我的account比这个例子复杂得多,我觉得逐个更新并不是一个好习惯,谢谢。

3 个答案:

答案 0 :(得分:1)

使用angular.extend

  

angular.extend(dst,src);

喜欢这个

angular.extend(account, rAccount);

JSFIDDLE

答案 1 :(得分:0)

它不起作用的原因主要是因为,angularjs将一个$$ hashKey属性添加到与ng-repeat一起使用的集合中的对象。

$$ hashkey是一个自动生成的键,其角度分配给数组,在ng-repeat指令中传递的集合。 Angular使用它来跟踪对数组所做的任何更改并相应地更新dom。

所以在你的案例中,帐户和rAccount没有相同的结构。这就是为什么它适用于 angular.extend ,因为@ anik-islam-abhi建议。您也可以使用

  

angular.copy(源,[目的地]);

 angular.copy(rAccount,account); 

http://jsfiddle.net/HB7LU/20042/

答案 2 :(得分:0)

account = rAccount不起作用。您必须更新$scope.accounts

请参阅http://jsfiddle.net/HB7LU/20043/