角色工厂,努力始终如一地共享数据

时间:2015-11-10 16:23:30

标签: javascript angularjs angularjs-service angularjs-factory

我正在处理票务申请,并且第一次使用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;

我所拥有的某个地方和包含

的初始化函数
//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对象,我甚至可以返回它们,但我真的希望拥有与我给出的第一个示例相同的数据交换机制。

如果有人可以加入并告诉我我做错了什么,我将不胜感激。

提前谢谢

0 个答案:

没有答案