我使用$ scope.watch并设置并将一个数据从一个控制器传递到另一个控制器。这工作正常,但是当我使用不同的html文件时,我的第一次点击不会传输数据。因为浏览器已刷新。但是当我点击Chrome中的返回箭头并设置一个值并单击时,我可以在第二页中获得该值。我该如何解决这个问题。请告诉我解决方案。
var data = {
Quantity: ''
};
return {
getQuantity: function() {
return data.Quantity;
},
setQuantity: function(quantity) {
data.Quantity = quantity;
}
};
.controller('DetailsCtrl', function($scope, $http, Data) {
$scope.quantity = '';
$scope.$watch('quantity', function(newValue50, oldValue50) {
if (newValue50 !== oldValue50)
Data.setQuantity(newValue50);
});
})
.controller('FifthCtrl', function($scope, $http, Data) {
$scope.$watch(function() {
return Data.getQuantity();
}, function(newValue50, oldValue50) {
if (newValue50 !== oldValue50)
$scope.quantity = newValue50;
});
})
答案 0 :(得分:0)
如果要在浏览器中的不同会话之间存储值,可以将数量值添加到local storage。
这是一个angularjs服务/工厂示例
app.factory('Data', function () {
var data = {
Quantity: ''
};
return {
getQuantity: function () {
if (localStorage.getItem("data") === null) {
data.Quantity = 0;
} else {
var jsonData = localStorage.getItem('data');
data.Quantity = JSON.parse(jsonData);
}
return data.Quantity;
},
setQuantity: function (quantity) {
data.Quantity = quantity;
localStorage.setItem("data", JSON.stringify(data));
}
};
});
注1:在这种情况下,您实际上不需要对象'data',因为您将值存储在存储中但我保持原样。
注意2:localStorage不能存储诸如对象之类的补充类型,你需要在存储之前创建它们的字符串,这就是使用JSON.stringify()的原因。