【问题标题】:Auto-refreshing a service value on several controllers when changed更改时自动刷新多个控制器上的服务值
【发布时间】:2017-05-02 12:03:38
【问题描述】:

我正在尝试使用服务将信息从一个控制器传递到另一个控制器。

它工作正常,但在下面的 sn-p/Fiddle 中,我必须:

  • 在输入中输入值
  • 点击FirstController中的“设置值”按钮
  • 点击SecondController中的“获取价值”按钮
  • 现在显示值

我希望更新后的值自动显示在SecondController中。

angular.module('app', []);
angular.module('app').factory('StoreService', function () {
    var storedObject;
    return {
        set: function (o) {
            this.storedObject = o;
        },
        get: function () {
            return this.storedObject;
        }
    };
});

angular.module('app').controller('FirstController', function ($scope, StoreService) {
    $scope.setValue = function (value) {
        StoreService.set(value);
    };
});

angular.module('app').controller('SecondController', function ($scope, StoreService) {
    $scope.getValue = function () {
        $scope.value = StoreService.get();
    };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <div ng-controller="FirstController">
        <fieldset>
            <legend>FirstController:</legend>
            <input type="text" ng-model="value" />
            <button ng-click="setValue(value)">Set value</button>
        </fieldset>
    </div>
    <div ng-controller="SecondController">
        <fieldset>
            <legend>SecondController:</legend>
            <button ng-click="getValue()">Get value</button>
            Value: {{value}}
        </fieldset>
    </div>
</div>

Fiddle

【问题讨论】:

  • 如果它们在同一个页面上并处理相同的数据,为什么要有两个独立的控制器?

标签: angularjs angular-services


【解决方案1】:

解决方案是使用您的factory 返回一个对象(带有您的属性)。在您的控制器中,您将能够将此对象用作参考,它将自动更新:

Forked your Fiddle here

angular.module('app', []);
angular.module('app').factory('StoreService', function() {
  return {
    storedObject: ''
  };
});

angular.module('app').controller('FirstController', function($scope, StoreService) {
  $scope.value = StoreService;

});

angular.module('app').controller('SecondController', function($scope, StoreService) {
  $scope.value = StoreService;

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app">
  <div ng-controller="FirstController">
    <fieldset>
      <legend>FirstController:</legend>
      <input type="text" ng-model="value.storedObject" />
      <button ng-click="setValue(value)">Set value</button>
    </fieldset>
  </div>
  <div ng-controller="SecondController">
    <fieldset>
      <legend>SecondController:</legend>
      Value: {{value.storedObject}}
    </fieldset>
  </div>
</div>

【讨论】:

  • 工作正常我有另一个可以将文本框替换为下拉列表我想根据下拉选择绑定值下拉一个控制器表是另一个控制器
  • @jose 它的工作方式相同:将下拉值保存在您的服务中,返回参考。 :)
  • 我尝试了 yar 但表格无法刷新帮助如何解决
  • 下拉值显示crctly但如何触发controller2页面中的刷新功能
  • @jose 如果没有代码,我真的帮不了你。这似乎是一个不同的问题。你能post another question这个问题吗?
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2021-06-20
  • 2012-09-03
  • 2015-11-19
  • 2016-10-17
  • 1970-01-01
  • 2014-11-27
  • 2010-09-16
相关资源
最近更新 更多