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

发布于 2021-02-01 10:02:31

我不确定是否遇到“最佳实践”问题,试图以一种怪异而奇妙的方式解决该挑战,或者我是否还没有掌握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

并且,为了演示,在一个单独的控制器中,我对工厂的update方法进行了以下调用:

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

正如我上面提到的,这对我来说是一个非常新的东西,因此我可能会犯错,但是我希望有一个工厂,可以在页面上的任何地方调用该方法(只要依赖项全部在行)以在几个地方更新该值。

如果我console.logthis.originCity.cityName在工厂内的更新方法,然后将它正确地输出为Test String,但对数据的其他引用目前没有更新。

关注者
0
被浏览
84
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。
    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}}
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看