#javascript #angularjs #angular-services
#javascript #angularjs #angular-сервисы
Вопрос:
У меня есть служба, в которой я храню все свои классы DTO, которые я сопоставляю с вызовами api. Когда я использую эти объекты сервиса, они отслеживают весь путь обратно в службу, поэтому я не могу обновить их, если захочу совершить другую транзакцию.
вот сервис
(function () {
"use strict";
var app = angular.module("app.bms");
app.service("dtoObjects", function () {
var state = {
Id: "",
Value: ""
}
var companyDto = {
Id: "",
Name: "",
Address: "",
Address2: "",
City: "",
State: state,
Zip: "",
Phone: "",
contactName: ""
}
var departmentDto = {
DepartmentID: "",
DepartmentName: "",
CompanyDto: companyDto,
IsActive: false,
States: [state]
}
var userDto = {
UserId: "",
FistName: "",
LastName: "",
Email: "",
Phone: "",
LoginName: "",
Password: "",
IsActive: "",
Client: companyDto,
Department: departmentDto
}
return {
departmentDto: departmentDto,
companyDto: companyDto,
userDto: userDto
}
});
})();
Вот как я это внедряю.
function userInfoController($scope, userService, dtoObjects, ngTableParams, popUpService, modalService)
Вот как я это использую
var userDto = dtoObjects.userDto;
popUpService.raisePopUp(addEditTplt, addEditCtrl, userDto, reloadTable);
console.log(dtoObjects.userDto)
;
все, что я назначил этому объекту, теперь сопоставляется с ним обратно в service. Возможно ли, чтобы angular остановил это глубокое наблюдение за сервисом?
Спасибо!
Комментарии:
1. Возможно ли, чтобы DTO возвращал функцию конструктора и
new
ее всякий раз, когда вам нужна новая транзакция?
Ответ №1:
Вы можете обернуть службу DTO в функцию и использовать new для создания новой копии каждый раз, когда вам нужно выполнить сброс. Итак, ваш сервис будет выглядеть так:
(function() {
"use strict";
var app = angular.module("app.bms");
app.service("dtoObjects", function() {
function dto() {
return {
companyDto: companyDto
//...
}
var companyDto = {
//...
}
}
return dto;
});})();
И тогда вы бы использовали его следующим образом:
var newDTO = new dtoObjects();
console.log(newDTO.companyDTO);
Ответ №2:
В общем, часть возможностей Angular заключается в том, что сервисы являются одиночными, и поэтому одна ссылка может быть привязана везде в вашем приложении. Использование DTO в Angular, как правило, добавляет большое количество ненужных сложностей, поскольку Angular не должен беспокоиться о состояниях транзакций на сервере.
Однако, если вам абсолютно необходима эта функция, вы можете использовать angular.copy()
для создания копии вашего DTO для использования в вашем представлении.
//example with 1 argument
var userDto = angular.copy(dtoObjects.userDto);
//example update, using two arguments
angular.copy(userDto, dtoObjects.userDto);
Комментарии:
1. Спасибо, я совсем забыл о copy. Единственная причина, по которой я начинаю это делать, заключается в том, что у нас довольно сложная модель, и я думаю, что их синхронизация таким образом позволит избежать путаницы.