Angular,如何停止对服务对象的跟踪

angular, how to stop tracking on service objects

本文关键字:对象 跟踪 服务 何停止 Angular      更新时间:2023-09-26

我有一个服务,我存储所有的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)

This is How I use it

var userDto = dtoObjects.userDto;
            popUpService.raisePopUp(addEditTplt, addEditCtrl, userDto, reloadTable);
            console.log(dtoObjects.userDto)

;

我赋给该对象的所有内容现在都映射回service。angular有可能停止使用这款深度手表吗?

谢谢!

您可以将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);

一般来说,Angular的部分强大之处在于服务都是单例的,因此单个引用可以绑定到应用中的任何地方。在Angular中使用dto往往会增加大量不必要的复杂性,因为Angular不应该关心服务器上的事务状态。

然而,如果你绝对需要这个功能,你可以使用angular.copy()来复制你的DTO,以便在你的视图中使用。

//example with 1 argument
var userDto = angular.copy(dtoObjects.userDto);
//example update, using two arguments
angular.copy(userDto, dtoObjects.userDto);