Передача переменной из контроллера в сервис angularjs

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

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


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

  this.fav = 0; 
}]);

Я хотел бы передать параметр переменной из контроллера ItemDetailsCtrl в FavoriteService, So this.fav = 0; стать this.fav = параметр Любые предложения? Заранее спасибо.

  • 1
    Как это +2 upvote? На это уже есть тысяча ответов. Просто гуглите, прежде чем задавать такой простой вопрос.
Теги:

4 ответа

0

Вот пример аккуратного обмена данными, где мы храним разные данные с помощью методов set и get. Не забудьте сохранить значения в объекте, или иногда вы можете получить некоторые странные результаты.

Обслуживание:

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;
0

Не используйте $ rootScope, вместо этого используйте функцию для установки параметров

В вашем сервисе

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

В вашем контроллере

  FavouriteService.setParam(parameter)
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;
}])

}]);
0

Я думаю, что самым чистым способом будет выставить свою переменную fav через методы get/set.

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; 
    }
}]);
  • 0
    Я запутался, почему вы определяете функции, которые затем будут перемещаться в глобальное пространство, а не привязывать их к this . Это, вероятно, работает, но это не соответствует моему мнению.
  • 0
    Это больше для удобства чтения, чем что-либо еще. Я привык работать с относительно крупными сервисами в некоторых из моих проектов, поэтому я могу сразу увидеть «api», предоставляемый сервисом. Я понимаю , что определив их как анонимные функции и прикрепление их к this не будет поднимать определение функций, но я на самом деле интересно , если вы можете уточнить на каких - либо проблемах, которые могут возникнуть из - за этот синтаксис

Ещё вопросы

Сообщество Overcoder
Наверх
Меню