Angular绑定服务属性到控制器范围

时间:2015-09-10 19:51:48

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

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

谢谢。

2 个答案:

答案 0 :(得分:4)

您可以在角度服务中创建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

答案 1 :(得分:0)

一旦你的价值发生变化就会被解雇,你可以将它传播到新的控制器

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