Angularjs 使用同一控制器在两个div之间共享数据
我有两个具有相同控制器的div,两个div的显示数据几乎相同。两个div都有一个更新对象的按钮。但当一个div的按钮更新对象时,它不会反映在第二个div上Angularjs 使用同一控制器在两个div之间共享数据,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我有两个具有相同控制器的div,两个div的显示数据几乎相同。两个div都有一个更新对象的按钮。但当一个div的按钮更新对象时,它不会反映在第二个div上 <body ng-app="myapp"> <div ng-controller="ctrl1"> {{list.greet}} <button ng-click="add('hi')">add</button> </div> <div ng-con
<body ng-app="myapp">
<div ng-controller="ctrl1">
{{list.greet}}
<button ng-click="add('hi')">add</button>
</div>
<div ng-controller="ctrl1">
{{list.greet}}
<button ng-click="add1('hello')">add</button>
</div>
</body>
两个div都具有
ng controller
属性。这意味着每个div都有自己的控制器实例。尝试将ng控制器添加到公共父元素
<body ng-app="myapp" ng-controller="ctrl1">
<div>
{{list.greet}}
<button ng-click="add('hi')">add</button>
</div>
<div>
{{list.greet}}
<button ng-click="add1('hello')">add</button>
</div>
</body>
{{list.greet}
添加
{{list.greet}
添加
您可以使用服务在控制器和同一控制器的不同实例之间共享数据:
var-app=angular.module('myapp',[])
.controller('ctrl1',函数($scope,myService){
$scope.a=myService.list;
$scope.add=函数(数据){
$scope.a.greet.push(数据);
}
})
.service('myService',function()){
this.list={greet:[]};
});代码>
Ctrl1:
{{a.greet}}
添加
Ctrl1:
{{a.greet}}
添加
因为您有两个不同的ng控制器指令,所以每个div都有自己的作用域
最简单的选择是使用$rootScope
var app=angular.module('myapp',[])
.controller('ctrl1',['$scope', '$rootScope', function($scope, $rootScope){
$rootScope.list={
greet:'hola'
}
$scope.add=function(data){
$rootScope.list.greet=data
}
$scope.add1=function(data){
$rootScope.list.greet=data
}
}]);
情况不同,我只是举了一个小例子。实际上,这两个div都是一个弹出窗口,我使用指令创建了它,并添加了一个。在这种情况下,您可能想使用一个服务来存储数据并将其注入控制器()我想使用相同的控制器您可以使用相同的控制器。。。我更新了答案,让它更清楚。
var app=angular.module('myapp',[])
.controller('ctrl1',['$scope', '$rootScope', function($scope, $rootScope){
$rootScope.list={
greet:'hola'
}
$scope.add=function(data){
$rootScope.list.greet=data
}
$scope.add1=function(data){
$rootScope.list.greet=data
}
}]);