【问题标题】:Angular bind service property to a controller scopeAngular 将服务属性绑定到控制器范围
【发布时间】:2015-12-07 05:58:52
【问题描述】:

我有 2 个控制器使用相同的服务,第一个控制器更改服务上的属性值,我需要第二个控制器知道属性已更改,以便在他当前的 $scope 中设置新值。我不想使用广播,有没有一种优雅的方式来做到这一点?

谢谢。

【问题讨论】:

标签: angularjs service angularjs-scope angularjs-service angularjs-controller


【解决方案1】:

这将在您的值更改后触发,您可以将其传播到新控制器

$scope.$watch('passValueHere', function(event, passValueHere){
     $scope.controller2Value =   passValueHere;
});

【讨论】:

    【解决方案2】:

    您可以在 Angular 服务中创建一个 object,其中将包含各种可共享的属性。您可以使用控制器范围变量直接分配该变量。这样两个控制器对变量使用的引用是相同的,就像我们给myCtrl1myCtrl2 一样,范围变量中只有一个副本。因此,一个变量的变化会更新另一个变量。

    标记

    <body>
      <div ng-controller="myCtrl1">
        1st Controller
        <input type="text" ng-model="model1.prop1" />
        <input type="text" ng-model="model1.prop2" />
      </div>
    
      <div ng-controller="myCtrl2">
        2nd Controller
        <input type="text" ng-model="model2.prop1" />
        <input type="text" ng-model="model2.prop2" />
      </div>
    
    </body>
    
    
    app.service('dataService', function(){
      var dataService = this;
      dataService.model = {
         'prop1': '',
         'prop2': '',
      }
    })
    

    控制器1

    app.controller('myCtrl1', function($scope, dataService){
         $scope.model1 = dataService.model;
    });
    

    控制器2

    app.controller('myCtrl2', function($scope, dataService){
         $scope.model2 = dataService.model;
    });
    

    Demo Plunkr

    【讨论】:

    • 完美!没用,因为我注册的是工厂而不是服务。
    • @user3288840 no..工厂也有可能发生同样的事情。您对工厂和服务感到困惑。请阅读此stackoverflow.com/a/28262966/2435473
    猜你喜欢
    • 2014-12-08
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2016-03-29
    • 2014-12-09
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多