Javascript angular工厂,难以一致地共享数据

Javascript angular工厂,难以一致地共享数据,javascript,angularjs,angularjs-service,angularjs-factory,Javascript,Angularjs,Angularjs Service,Angularjs Factory,我正在开发票务应用程序,这是我第一次使用Angular。我的问题是在工厂和控制器之间共享和更新数据 我有一个工厂和控制器按预期工作,但当我试图在另一个控制器和另一个工厂之间实现相同的东西时,事情并没有按预期工作 下面是一个工作示例 var PageStatsFactory = function ($http, $q) { var pageStatsObj = {}; pageStatsObj.pageStats = { }; pageSta

我正在开发票务应用程序,这是我第一次使用Angular。我的问题是在工厂和控制器之间共享和更新数据

我有一个工厂和控制器按预期工作,但当我试图在另一个控制器和另一个工厂之间实现相同的东西时,事情并没有按预期工作

下面是一个工作示例

var PageStatsFactory = function ($http, $q)
{
    var pageStatsObj = {};

    pageStatsObj.pageStats = {          
    };

    pageStatsObj.getTicketStats = function ()
    {
        var data = $.param({});
        $http.post('/Home/getIndexPageStats', data)
        .success(function (data, status, headers, config) {

            var stats = data.stats;

            pageStatsObj.pageStats.total = stats.total_tickets;
            pageStatsObj.pageStats.new_tickets = stats.new_tickets;
            pageStatsObj.pageStats.old_tickets = stats.old_tickets;
            pageStatsObj.pageStats.old_tickets = stats.closed_tickets;
            pageStatsObj.pageStats.today_tickets = stats.today_tickets;
            pageStatsObj.pageStats.lastweek_tickets = stats.sevenday_tickets;                                       

        }).error(function (data, status, headers, config)
        {

        });
    }

    return pageStatsObj;
}

angular.module('HelpDesk')
    .factory('PageStatsFactory', ['$http', '$q', PageStatsFactory]);
在控制器中,我只需要

$scope.pageStats = PageStatsFactory.pageStats;
下面的某个地方我有和init函数,它包含

//getting ticket stats
PageStatsFactory.getTicketStats();
每次我运行init时,初始pageStatsObj.pageStats都会用新值更新

我试图在另一个工厂和控制器之间实现相同的机制,由于某些原因,我没有得到更新的工厂值

这是控制器:

 var ShowTicketCtr = function ($scope, ShowTicketFactory)
{               
    $scope.ticket = ShowTicketFactory.ticket;
    $scope.ticketItems = ShowTicketFactory.ticketItems;


    //initialize controler
    init();
    function init()
    {
        $scope.ticket.length = 0;
        ShowTicketFactory.getTicket();
    }
}

angular.module('HelpDesk')
    .controller('ShowTicketCtr', ['$scope', 'ShowTicketFactory', ShowTicketCtr]);
还有我的工厂

var ShowTicketFactory = function ($http, $q)
{
    var showTicketObj = {};
    showTicketObj.ticket = {};
    showTicketObj.ticketItems = [];

    showTicketObj.getTicket = function ()
    {
        //var deferred = $q.defer();
        var ticket_id = showTicketObj.getParameterByName("id");
        var data = JSON.stringify({ id: ticket_id });

        $http.post('/Tickets/GetTicketInfo', data)
            .then(function successCallback(response) {
                var data = response.data;

                showTicketObj.ticket = data.ticket;
                showTicketObj.ticketItems = data.ticketItems;

            }, function errorCallback(response) {                  
            });            
    }


    showTicketObj.getParameterByName = function (name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
            results = regex.exec(location.search);
        return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    }

    return showTicketObj;
}


angular.module('HelpDesk')
    .factory('ShowTicketFactory', ['$http', '$q', ShowTicketFactory]);
正如我所说,我希望$scope.ticket每次在工厂内更改时都能得到更新的值,但由于某些原因,它不会发生

我已经调试过工厂,它确实得到了正确的值,如果我使用promise对象,我甚至可以返回它们,但我真的希望拥有与我给出的第一个示例中相同的数据交换机制

如果有人能告诉我我做错了什么,我将不胜感激


提前感谢

重新分配对象时,您正在断开对对象的引用。showTicketObj.ticket=data.ticket;创建一个新对象,该对象与ControllerHanks中引用的用于注释的对象不同。请你再详细解释一下,我有点糊涂了。那么,对我来说,分配对象的正确方法是什么?填充现有数组而不是重新分配新数组。对于对象,扩展现有对象,而不是重新指定新对象one@charlietfl你完全正确。我试过你的建议,效果很好。谢谢你的帮助。