Angular 将服务 属性 绑定到控制器范围
Angular bind service property to a controller scope
我有 2 个控制器使用相同的服务,第一个控制器更改服务上 属性 的值,我需要第二个控制器知道 属性 已更改以设置新的他当前 $scope 中的值。我不想使用广播,有什么优雅的方法吗?
谢谢。
您可以在 angular 服务中创建一个 object
,其中将包含各种可共享的属性。您可以直接将该变量分配给您的控制器范围变量。这样两个控制器使用的变量引用是相同的,就像我们给 myCtrl1
和 myCtrl2
的范围变量中只有一个副本。因此,一个变量的变化会更新另一个变量。
标记
<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;
});
一旦你的值改变,这将被触发,你可以将它传播到新的控制器
$scope.$watch('passValueHere', function(event, passValueHere){
$scope.controller2Value = passValueHere;
});
我有 2 个控制器使用相同的服务,第一个控制器更改服务上 属性 的值,我需要第二个控制器知道 属性 已更改以设置新的他当前 $scope 中的值。我不想使用广播,有什么优雅的方法吗?
谢谢。
您可以在 angular 服务中创建一个 object
,其中将包含各种可共享的属性。您可以直接将该变量分配给您的控制器范围变量。这样两个控制器使用的变量引用是相同的,就像我们给 myCtrl1
和 myCtrl2
的范围变量中只有一个副本。因此,一个变量的变化会更新另一个变量。
标记
<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;
});
一旦你的值改变,这将被触发,你可以将它传播到新的控制器
$scope.$watch('passValueHere', function(event, passValueHere){
$scope.controller2Value = passValueHere;
});