Javascript 通过工厂传递对$scope对象的引用

Javascript 通过工厂传递对$scope对象的引用,javascript,angularjs,Javascript,Angularjs,我在控制器$scope中找到一个项目。它取自API并传递给工厂,以便于显示的方式对其进行格式化 angular.module('app').controller 'CustomersCtrl', ['$scope', 'CustomerDetailsFactory', function($scope, CustomerDetailsFactory) { $scope.item = { full_name: "Jane Doe" //more values here

我在控制器$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>

{{detail.label}

{{detail.value}

//更多像这样的领域
假设
$scope.editMode
更改为true,则显示并更改输入

问题是,更改的值保存在
$scope.details
模型中,但不保存在
$scope.item
模型中(我相信是通过引用传递给工厂的)。我需要向服务器发送一个JSON,其中包含一个和我之前得到的一样的对象,而不是工厂完全改变的结构,这只是为了更好地显示


请解释如何通过引用
$scope.item
对象将
$scope.details
对象“绑定”,以便在我更改详细信息时,原始项目也会更改。

FYI-您将
CustomerDetailsFactory
DetailsFactory
混为一谈了?不,我只是没有为示例清理足够的代码,我会解决:)可能会有一些语法错误,因为我用CoffeScript和Jade编写,但不要费心指出它们,我确信在语法方面一切正常。嗯,你的想法对我来说是个坏主意。要在视图中显示的标签不属于服务,您应该直接使用真实对象编写模板,而不是在字段上迭代。无论如何,这种策略不会工作很长时间:您将希望以不同的方式、不同的样式、在多个列上显示某些字段,等等。它可以工作,因为我有多个视图使用相同的方案来显示项目。我明白你的意思,我只是觉得我可以让视图更具可重用性(现在我有了多个不同列表的相同视图)。当你编写
item.full_name
时,你传递了值,而不是引用。这是一个示例演示,可能对您有所帮助-仅供参考-您混淆了
CustomerDetailsFactory
DetailsFactory
?不,我只是没有为示例清理足够的代码,我会修复它:)可能会有一些语法错误,因为我使用了CoffeScript和Jade编写,但不用麻烦指出它们,我确信在语法方面一切都正常。嗯,你的想法在我看来是个坏主意。要在视图中显示的标签不属于服务,您应该直接使用真实对象编写模板,而不是在字段上迭代。无论如何,这种策略不会工作很长时间:您将希望以不同的方式、不同的样式、在多个列上显示某些字段,等等。它可以工作,因为我有多个视图使用相同的方案来显示项目。我明白你的意思,我只是觉得我可以让视图更具可重用性(现在我有了多个不同列表的相同视图)。当你编写
item.full_name
时,你传递了值,而不是引用。这是一个示例演示,可能会有所帮助-