数据没有在控制器之间从我的服务更新?

时间:2016-10-27 08:58:43

标签: angularjs

第一页是我选择数据的地方。当我单击在该页面上运行该功能的按钮时,它会将数据发送到服务,然后在第二页上,该控制器从服务中提取数据并显示它。

我遇到的问题是,如果我回到第一页,更改值,然后单击运行该功能的按钮,第二页上的数据将显示第一个值,而不是更新的值。< / p>

服务代码:

   app.service('popService', function(){

   var popData = [];

   var addData = function(newObj){
        popData.push(newObj);
    };

   var getData = function(){
    return popData[0];
   };
   return{
    addData: addData,
    getData: getData
};
});

将数据传递到第一个控制器中的服务的代码:

 $scope.passData = function(){
    $total_value = $(".total").html();
    $scope.someData = $total_value;
    popService.addData($scope.someData);
  };

在第二个控制器中检索数据的代码:

$scope.totals = popService.getData();

我仍然没有得到它。抱歉。让我试着重新解释一下。

我可以说,我需要在不同页面上存储10个变量。从我到目前为止所理解的,1个服务将所有这些变量存储在一个数组中是最好的。 (我目前有6个服务,存储不同的变量,所以我可以定位它们。)

我的新问题是,如何在服务中将多个变量存储到1 var,然后如何使用getdata将它们作为目标?例如:

  app.service('example_service', function(){
  var storedData = [];
  var addData = function(newObj){
  storedData.push(newObj)
  };

  var getData = function(){
  return storedData;
  };

  return {
  addData: addData,
  getData: getData};
  }); 

将数据传递给它:

  $scope.passData = function(){
  $scope.data_1 = 1;
  $scope.data_2 = 2;
  $scope.data_3 = 3;
  popService.addData($scope.data_1);
  popService.addData($scope.data_2);
  popService.addData($scope.data_3);
  };

所以我想说我推3项,我想清除第二项。像storedData [1] .length = 0;?

之类的东西

道歉,如果这是神秘的,我尽我所能来解释我需要什么,以及我无法得到它。

然后当我转到数组中的3个项目中的一个时:

  $scope.data_1 = popService.getData(); (how do i target a specific item?)

4 个答案:

答案 0 :(得分:0)

您正在返回数组的[0]索引,该索引显然会返回第一个对象,在服务中将其更改为

var getData = function(){
    return popData;
};

您可以使用

清除它
 var clearData = function(){
        popData = [];
    };

答案 1 :(得分:0)

在AngularJS中,服务是单例,所以它们只被实例化一次。因此,第一次调用它并向其添加数据时,数据将保持不变,直到刷新整个页面,因此即使您返回并再次前进,数据仍将存在。

如果您只想查看新数据,可以在addData函数中清除服务中的数据,或者您可以通过返回整个数组而不仅仅是第一个元素来显示所有数据。

e.g。返回整个数组

var getData = function(){
    return popData;
};

e.g。在添加新数据之前清除数组

var addData = function(newObj){
    popData.length = 0;
    popData.push(newObj);
};

答案 2 :(得分:0)

当您返回第一页时, popData 仍会包含旧条目。要获取最近的add值,您可以使用:

<强> 1。 pop():(如果你不需要旧值)

var getData = function(){
  return popData.pop();
};

<强> 2。获取最后一个附加值:(如果您需要旧值)

var getData = function(){
  return popData[popData.length-1];
};

答案 3 :(得分:0)

我认为您的代码中存在拼写错误,除非您已在其他位置定义$total_value,因为您尚未共享整个代码。不应该是$scope.total_value或简单var $total_value吗?

$scope.passData = function(){
  var $total_value = $(".total").html();
  //or $scope.total_value = $(".total").html();
  $scope.someData = $total_value;
  //or $scope.someData = $scope.total_value;
  popService.addData($scope.someData);
 };