Javascript 通过工厂传递对$scope对象的引用
我在控制器$scope中找到一个项目。它取自API并传递给工厂,以便于显示的方式对其进行格式化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
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
时,你传递了值,而不是引用。这是一个示例演示,可能会有所帮助-