在控制器之间共享数据的Angularjs仅在第一次工作

时间:2015-04-30 14:30:23

标签: javascript angularjs

我正在尝试使用工厂在angularjs中的控制器之间共享数据。我已经按照其他类似问题的答案,但我只能在第一轮工作。我有一个有3个州的应用程序。其中一个州是一个简单的计算器。我希望计算器状态中的总数也以不同的状态显示。使用下面的代码,总数总是显示为0.所以我认为它第一轮工作,但不会更新总和'改变了。有人有什么建议??

HTML:

<div class="list card">
  <div class="item item-divider">Total</div>
  <div class="item item-body">
    <div ng-model="figure">
      <b>{{figure}}</b> calories consumed today
    </div>
  </div>
</div> 

&#39;家&#39;控制器:

.controller('homeCtrl', function($scope, total) {

$scope.figure = total.get();

})

计算器控制器:

.controller('calcCtrl', function($scope, total) {

$scope.result = 0;

$scope.reset = function() {
    $scope.result = 0;

};

$scope.add = function(i) {
    if(!i){

    }else {
        $scope.result = $scope.result + parseInt(i);
        total.set($scope.result);

    }
};

});

工厂

.factory('total', function() {

var val = 0;

return {
get: function() {
    return val;
},
set: function(num) {
    val = parseInt(num);
    }
};  
})

1 个答案:

答案 0 :(得分:2)

如果使用对象存储值,它会更好。

var data = {val : 0};
return {
  get: function() {
    return data;
  },
  set: function(num) {
    data.val = parseInt(num);
  }
};  

或者您总是调用get()函数来获取最新值

.controller('homeCtrl', function($scope, total) {
   $scope.figure = total.get;
})

并在HTML中

<b>{{figure()}}</b>