Javascript angular工厂,难以一致地共享数据
我正在开发票务应用程序,这是我第一次使用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
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你完全正确。我试过你的建议,效果很好。谢谢你的帮助。