我正在处理票务申请,并且第一次使用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对象,我甚至可以返回它们,但我真的希望拥有与我给出的第一个示例相同的数据交换机制。
如果有人可以加入并告诉我我做错了什么,我将不胜感激。
提前谢谢