将工厂中的数据从一个控制器传递到另一个控制器

时间:2015-06-22 08:43:57

标签: angularjs factory angularjs-service

我不确定自己是否采用了最佳做法"问题在于我试图以一种奇怪而奇妙的方式解决这一挑战,或者我对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');
}

正如我上面提到的,这对我来说是非常新的,所以我可能会发现这一切都错了,但我希望有一个工厂,我可以从页面的任何地方调用一个方法(只要依赖项在一些地方更新该值。

如果我在工厂内的更新方法中console.log this.originCity.cityName,那么它会正确输出为Test String,但其他对数据的引用当前不会更新。

1 个答案:

答案 0 :(得分: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}}