Я написал Угловую фабрику для хранения объекта, который мне нужно передать в разные контроллеры. Завод выглядит следующим образом:двусторонняя привязка в угловых фабриках
app.factory('SearchEngineConfigs', function() {
var configs = {
isInternational: false,
TripType: 1,
journeys: []
}
var _setInternational = function(val) {
configs.isInternational = val;
}
var _setTripType = function(val) {
configs.TripType = val;
}
var _setJourneys = function(journeys) {
configs.journeys = journeys;
}
var _getConfigs = function() {
return configs;
}
return {
setInternatioanl: _setInternational,
setTripType: _setTripType,
setJourneys: _setJourneys,
getConfigs: _getConfigs
}
});
Таким образом, у меня есть эта фабрика, введенная в мои контроллеры. В одном из контроллеров я устанавливаю значения таких конфигураций как:
SearchEngineConfigs.setInternatioanl($scope.searchEngine.isInternational);
SearchEngineConfigs.setTripType($scope.searchEngine.TripType);
SearchEngineConfigs.setJourneys($scope.journeys.slice());
Пока все хорошо. Что происходит сейчас, так это то, что каждый раз, когда я меняю, скажем, $scope.searchEngine.isInternational
, не вызывая фабричный метод SearchEngineConfigs.setInternatioanl
, это изменение все еще отражается на фабрике и, таким образом, обновляет это свойство в другом контроллере, который использует этот завод одновременно с первым контроллером. Как я могу избежать этого? Я хочу изменить значение объекта внутри фабрики, когда я объясняю, что вызываю соответствующий метод фабрики.
Ваше решение работает просто отлично! Почему вы использовали функцию apply и передали завод, так как это первый аргумент? –
Это гарантирует, что ключевое слово 'this' продолжает ссылаться на завод, как и ожидалось. Кроме того, он корректно раскладывает массив 'argumentsCopy'. Если есть, если ваши функции использовали 'this' или имели несколько входных аргументов, вы могли бы заметить разницу больше. –