【问题标题】:AngularJS - Service talking to Controller [closed]AngularJS - 服务与控制器交谈[关闭]
【发布时间】:2015-10-10 05:47:53
【问题描述】:

Angular JS 具有非常酷的双向绑定功能,它允许控制器数据在视图更改时自动更新(反之亦然)。 今天,我们可以拥有依赖于服务的控制器。 服务是否可以依赖控制器? 例如如果服务想按照自己的意愿从控制器获取某些数据,有可能吗?

另外,是否可以扩展 ng-model 变量的范围以作为变量传递给服务(连同控制器),从而自动保持同步?

谢谢。

【问题讨论】:

  • 这两种情况听起来都是一个非常糟糕的主意。尊重您的应用程序的状态。不要试图到处传播它。 “是啊,是啊,但是你们的科学家们太专注于他们是否可以,以至于他们没有停下来思考他们是否应该这样做。” - 杰夫·高布伦。

标签: javascript angularjs frameworks


【解决方案1】:

当您将多个变量分配给同一个对象时,每个变量都是对同一个对象的引用。

以下是演示。根据用例,这可能不是首选方法

app.controller('MainCtrl', function($scope, MyService) {
    $scope.mainModel = MyService.myObject;
})

app.controller('OtherCtrl', function($scope, MyService) {
    $scope.otherModel = MyService.myObject;
})

app.factory('MyService', function() {
  return {
    myObject: {
      name: 'test'
    }
  }
});

以下两个输入将显示相同的值

<div ng-controller="MainCtrl">
     Name:<input ng-model="mainModel.name">
</div>
<div ng-controller="OtherCtrl">
     Name:<input ng-model="otherModel.name">
</div>

DEMO

【讨论】:

  • 谢谢。如果在服务中发生更改,更改会立即反映在视图中吗?
  • 只要不破坏对象引用。如果您在服务中重新分配myObject,它会破坏它......但更改myObject.name 的值不会。很容易让您创建另一种方法来自己尝试
  • 如果你停下来想想这个问题,当你输入输入时,每个控制器都已经在这样做了
  • 在本地主机上试过了,它可以工作。谢谢。
  • 没有理由不让演示工作正常
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多