将变量从控制器传递到服务angularjs

时间:2016-04-01 19:26:27

标签: angularjs

app.controller('ItemDetailsCtrl', function($scope,FavoriteService) {

var parameter = $scope.Diamoni.Favorites;
});


 app.service("FavoriteService",[function(){

  this.fav = 0; 
}]);

我想将ItemDetailsCtrl控制器中的变量参数传递给FavoriteService,所以this.fav = 0;成为this.fav =参数有什么建议吗?提前谢谢。

4 个答案:

答案 0 :(得分:0)

不要使用$ rootScope,而是使用函数来设置参数

在您的服务中

var self = this;
this.setParam = function(param){
   self.fav = param
}

在您的控制器中

  FavouriteService.setParam(parameter)

答案 1 :(得分:0)

我认为最干净的方法是通过get / set方法公开你的fav变量。

app.controller('ItemDetailsCtrl', function($scope, FavoriteService) {
    var parameter = $scope.Diamoni.Favorites;

    FavoriteService.setFav(parameter);
    console.log(FavoriteService.getFav()); // will be the proper value
});


app.service("FavoriteService",[function(){
    var fav = 0; 
    this.setFav = setFav;
    this.getFav = getFav;

    function setFav(favValue) {
        fav = favValue;
    }

    function getFav() { 
        return fav; 
    }
}]);

答案 2 :(得分:0)

试试这个:

app.controller('ItemDetailsCtrl', function($scope,FavoriteService) {
    var parameter = $scope.Diamoni.Favorites;
    FavoriteService.setParam(parameter);
});

app.service("FavoriteService",[function(){
    var service = this;
    service.setParam = function(parameter) {
        service.fav = parameter;
    };
}]);

我在服务中添加了一个方法来设置fav变量。 使用工厂代替服务很容易实现这种逻辑。如果你想我可以发给你工厂代码片段

<强> 修改

使用工厂:

app.controller('ItemDetailsCtrl', function($scope,FavoriteService) {
    var parameter = $scope.Diamoni.Favorites;
    FavoriteService.setParam(parameter);
});


app.factory('FavoriteService', ['', function(){

    var service = {}

    service.setParam = function(parameter) {
        service.fav = parameter;
    };

    return service;
}])

}]);

答案 3 :(得分:0)

这是一个简洁的数据共享服务示例,我们使用setget方法存储不同的数据。请记住将值存储在对象中,否则有时会得到一些奇怪的结果。

服务:

graphs.service('graphsData', [function() {

  var graphs = this;

  var data = {
    all: null,
    list: null,
    single: null
  };

  graphs.set = function(k, v) {
    data[k] = v;
  };

  graphs.update = function(k, s, v) {
    data[k][s] = v;
  };

  graphs.get = function(k, v) {
    return data;
  };
}]);

来自您的控制器:

// Stores the this.fav variable as myFavoriteValue (data.myFavoriteValue)
graphsData.set('myFavoriteValue', this.fav);

要获取该值,只需调用服务的get函数:

graphsData.get().myFavoriteValue;