2015-06-22 75 views
1

我不確定我是否有一個「最佳實踐」問題,我試圖以一種奇怪而美妙的方式解決這個挑戰,或者我對AngularJS只是還沒有。將工廠中的數據從一個控制器傳遞到另一個控制器

場景:所以我一直在試圖想出一個方法來在頁面上輸出「originCity.cityName」幾次,所有引用同一工廠內的同一個對象,希望如果我將其設置爲其他值(例如「測試字符串」),那麼它將追溯替換我在頁面附近的所有{{originCity.cityName}}

module.service('cityFactory', function() { 

    return { 
     originCity: { 
      cityName: 'TestLocation' 
     }; 

     //Update the city 
     this.update = function (newCityName) { 
      this.originCity.cityName = newCityName; 
     } 
    }); 

在兩個單獨的控制器我有以下呼叫到工廠:

$scope.originCity = cityService.originCity 

而且,以證明,在一個單獨的控制器我有以下呼叫到工廠的更新方法:

$scope.setCity = function() { 
    cityService.update('Test String'); 
} 

正如我上面提到的,這是很新的給我,所以我可能會去這一切錯誤的,但我希望能有一個方法,一個工廠,我可以從任何地方呼籲日e頁面(只要依賴關係完全一致)就可以在幾個地方更新該值。

如果我console.logthis.originCity.cityName在工廠內的更新方法,然後它輸出正確爲Test String但其他引用的數據當前不更新。

+0

你怎麼稱呼的更新方法?如果你把它放在'$ watch'中,它應該正確更新 – Guinn

+0

哦,等等,你更新工廠.. missread that。在那種情況下,你如何改變價值?通過輸入框? – Guinn

+0

@Guinn出於演示目的我儘量保持它儘可能簡單,所以我只是在頁面上放置一個隨機按鈕,如果按下我稱爲更新方法。 – Aleski

回答

0
module.factory('cityFactory', function() { 
    var _cityName = null; 
    var cityFactoryInstance = {}; 

    //Update the city from outside the DOM: 
    var _update = function (newCityName) { 
     _cityName = newCityName; 
    } 

    cityFactoryInstance.update = _update; 
    cityFactoryInstance.cityName = _cityName; 
    return cityFactoryInstance; 
}); 

module.controller('controller1', 
    ['$scope','cityFactory', function ($scope, cityFactory) { 

     $scope.originCity.cityName = cityFactory.cityName; 
    }]); 

module.controller('controller2', 
    ['$scope', 'cityFactory', function ($scope, cityFactory) { 

     $scope.originCity.cityName = cityFactory.cityName; 
    }]); 

在DOM:

{{originCity.cityName}} 
相關問題