当我在angular中使用$ scope.watch时,我在传递数据时遇到了问题

时间:2016-10-04 03:49:50

标签: javascript angularjs html5

我使用$ 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;
    });

})

1 个答案:

答案 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()的原因。