【问题标题】:need to find out the source of angularjs factory values modifier需要找出angularjs工厂值修饰符的来源
【发布时间】:2016-08-03 00:52:10
【问题描述】:

在我的 angularjs 应用程序中,我使用工厂来存储值并在控制器之间共享它们。但是我遇到了一个特殊的问题。

以下是我的工厂:

    factory.quoteLinks = {allLinks : [], allLeftLinks :[],  curSection : "-1", insType: "-1", test:"-1"};

    factory.setQuoteLinks = function(qlinks, qleftLinks, qsubLink, qinsuranceType, testVal) {
            factory.quoteLinks = { allLinks : qlinks, allLeftLinks : qleftLinks, curSection: qsubLink, insType: qinsuranceType, test:testVal};
        };

    factory.getQuoteLinks = function() {
            return factory.quoteLinks;
        };

据我所知,只有当我调用factory.setQuoteLinks 时,这些值才会存储在factory.quoteLinks 中。因此,每当我明确调用factory.setQuoteLinks 时,这些值都会正确存储。在调试代码的剩余部分一段时间后,在调试期间,我注意到即使我没有调用factory.setQuoteLinksfactory.quoteLinks 中的allLinks 的值也被修改为其他一些值,我无法弄清楚即使我没有在该特定点调用factory.setQuoteLinks 来修改allLinks,这也是从那里得到修改的。我有没有可能跟踪工厂中的这个值是从哪里修改的,我的意思是修改的原因?我离开时不知道如何解决?

【问题讨论】:

  • 如果factory.getQuoteLinks() 的消费者正在/正在修改集合,则这些更改将在factory.quoteLinks 引用的对象上进行。

标签: angularjs angularjs-scope angularjs-service angularjs-factory


【解决方案1】:

Ax Max Sorin 说您可能在此处之外对其进行了修改,因为您将在 factory.getQuoteLinks 中传回对它的引用。如果您需要此更改,请使用角度副本:

factory.getQuoteLinks = function() {
        return angular.copy(factory.quoteLinks);
};

这将返回一个复制的quoteLinks。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多