我在控制器$ scope中有一个项目。它取自API并传递给工厂,以便以易于显示的方式对其进行格式化。
angular.module('app').controller 'CustomersCtrl', ['$scope', 'CustomerDetailsFactory', function($scope, CustomerDetailsFactory) {
$scope.item = {
full_name: "Jane Doe"
//more values here
};
$scope.details = CustomerDetailsFactory.get($scope.item);
}]
angular.module('app').factory 'CustomerDetailsFactory', [function() {
var get = function(item) {
var detailed = [{
label: "Full name"
value: item.full_name
}
//more objects here
];
return detailed;
}
return {get: get};
}]
然后通过ng-repeat显示详细信息。它们需要可编辑,以便用户可以编辑某些字段并保存它们。我这样显示:
<div ng-repeat="detail in details">
<label> {{detail.label}} </label>
<p ng-if="!editMode"> {{ detail.value }} </p>
<input ng-if="editMode" ng-model="detail.value"></input>
//more fields like this
</div>
假设$scope.editMode
更改为true,则会显示并更改输入。
问题是,更改的值保存在$scope.details
模型中但不保存在$scope.item
模型中(已传递给工厂,我相信参考)。而且我需要向服务器发送一个带有对象的JSON,就像我之前得到的那样,而不是工厂完全改变的结构,只有很好的显示才需要。
请解释如何通过引用$scope.details
对象使$scope.item
对象“绑定”,这样当我更改细节时,原始项目也会发生变化。