服务数据未更新Angular

时间:2015-06-21 09:18:02

标签: angularjs angularjs-service

我有一个服务,每次控制器加载时都会调用方法getData(type)。该函数应该更新它自己的两个对象dealersitems。我的控制器引用这两个对象来监视更改并相应地更新视图,但factory变量永远不会更新,因此视图永远不会被填充。这是我的工厂

    app.factory('LS', function($window) {
    var dealers=[];
    var items=[];
    console.log(this);
return {
    setData: function(type,val) {
        type=='dealers'?chrome.storage.local && chrome.storage.local.set('dealers', JSON.stringify(val)):chrome.storage.local && chrome.storage.local.set('items', JSON.stringify(val));
        return this;
    },
    getData: function(type) {
        if(type=='dealers'){
            chrome.storage.local && chrome.storage.local.get('dealers',function(result){
                if(Object.keys(result).length)
                {
                    this.dealers=result.dealers;
                }
                else{
                    var val=[{name:"name",id:5},{},...];
                chrome.storage.local && chrome.storage.local.set({'dealers': JSON.stringify(val)});
                chrome.storage.local && chrome.storage.local.get('dealers',function(result){
                    this.dealers=result.dealers;
                });
                }
            });
        }
        else
        {
            chrome.storage.local && chrome.storage.local.get('items',function(result){
                if(Object.keys(result).length)
                {
                    this.items=result.items;
                }
                else{
                    var val=[{name:"name",price:500,number:0},{},...];
                    chrome.storage.local && chrome.storage.local.set({'items': JSON.stringify(val)});
                    chrome.storage.local && chrome.storage.local.get('items',function(result){
                        this.items=result.items;
                    });
                }
            })
        }
    },
    dealers:dealers,
    items:items
};
  })

这是我的控制器

    .controller('OrderCtrl', function($scope,$timeout, $stateParams,LS) {
    this.dealers=LS.dealers;
    this.itemslist=LS.items;
    LS.getData('dealers');
    LS.getData('items');
    $scope.resetitems=angular.copy($scope.itemslist);
    $scope.order={dealer:'',submissionDate:new Date()};
    $scope.resetorder=angular.copy($scope.order);
    $scope.doRefresh = function() {

        console.log('Refreshing!');
        $timeout( function() {
            //simulate async response
            $scope.dealers=LS.getData('dealers');
            $scope.itemslist = LS.getData('items');
            //Stop the ion-refresher from spinning
            $scope.$broadcast('scroll.refreshComplete');

        }, 1000);

    };
    $scope.sum = function() {
        var total=0;
        angular.forEach($scope.itemslist , function(item){
            //if(false)
            total=total+(item.data*item.number);
        });
        return total;
    }
    var ordered=[];
    $scope.submit=function(){
        angular.forEach($scope.itemslist , function(item){
            if(item.number>0)
            {
                ordered.push({'name':item.value,'pcs':item.number,'price':(item.data*item.number)});
            }
        });
        alert('You ordered '+ ordered);

        addOrder({"dealername":JSON.parse($scope.order.dealer).name,"dealerid":JSON.parse($scope.order.dealer).id,"date":$scope.order.submissionDate,"bill":$scope.sum(),"items":ordered});
        ordered=[];
        angular.copy($scope.resetorder,$scope.order);
        angular.copy($scope.resetitems,$scope.itemslist);
    }
     })

1 个答案:

答案 0 :(得分:0)

问题出在这里 chrome.storage.local && chrome.storage.local.get('dealers',function(result){ if(Object.keys(result).length) { this.dealers=result.dealers; } else{ var val=[{name:"name",id:5},{},...]; chrome.storage.local && chrome.storage.local.set({'dealers': JSON.stringify(val)}); chrome.storage.local && chrome.storage.local.get('dealers',function(result){ this.dealers=result.dealers; }); }

在控制器中,我将控制器中的经销商分配给工厂中的经销商,然后在工厂中,我更改经销商的参考,以便控制器中的经销商指向先前的存储位置和经销商工厂现在指向新的内存位置。 解决方案是不更改工厂变量引用。 从现在起一定要小心使用JavaScript