Angularjs - 更新同一控制器的多个实例
Angularjs - Updating multiple instances of the same controller
我的问题:我的站点中有多个控制器实例。当我更新"x"时,只有当前实例/div 会更新。
JSFiddle:http://jsfiddle.net/evgahe2u/(简化的示例,每个ng控制器都在自己的视图中。
.HTML
<!-- this is a simplified example -->
<div ng-app="myApp">
<!-- this is in view1.html -->
<div ng-controller="myController">
<input type="text" ng-model="x" /> {{x}}
</div>
<!-- this is in view2.html -->
<div ng-controller="myController">
<input type="text" ng-model="x" /> {{x}}
</div>
</div>
.JS
var myApp = angular.module('myApp', []);
myApp.controller('myController', function($scope) {
$scope.x = 'test';
});
我的问题:当我更新 View1.html 的 X 值时,我怎样才能拥有它,然后它会更新 view2.html 的视图?
这很容易。
据我说,最好的方法是创建一个工厂。
假设工厂 X,让我们为两个视图创建两个控制器:
myApp.controller('1Ctrl', function($scope, x) {
$scope.x = x.x;
});
myApp.controller('2Ctrl', function($scope, x) {
$scope.x = x.x;
});
myApp.factory('x', function() {
return {
x: 'value'
};
});
完整示例:JSFiddle
现在,如果 X 被更新,它将在两个控制器中更新,因为对象的属性。两个作用域上的两个 x 是相同的 x。
从 rootScope 广播
$rootScope.$broadcast("changeXevent", dataToSend);
然后使用控制器中的$on处理它。
myApp.controller('myController', function($scope, $rootScope) { // inject rootscope
$scope.x = 'test';
// watch for event
$scope.$on('changeXevent', function(event, data){
$scope.x = data;
});
// watch for changes on x
$scope.$watch('x', function(newValue, oldValue){
if(newVal !== oldVal)
$rootScope.$broadcast('changeXevent', $scope.x);
});
});
相关文章:
- 概念验证模型控制器调用正确的实例
- 角度 JS 控制器未实例化
- 在具有多个控制器的模块中实例化$scope
- 以控制器为语法的多个angularjs指令实例
- 每次使用角度控制器都会创建一个新的if实例
- Ember.js:如何使用模型的单个实例创建路由/控制器
- 从 $scope 上的函数访问控制器内的实例函数
- 在控制台中列出正在运行的控制器实例及其 this 变量
- 实例化自定义角度控制器
- 从控制器调用特定指令实例的函数
- Typescript 中 AngularJS 控制器的实例与原型方法
- Emberjs-1.0 将控制器实例传递给 ember 组件
- 如何在 angular 的控制器中使用用户定义的类实例/对象
- 角度控制器在缩小后不实例化
- AngularJS新路由器无法实例化控制器
- 在 AngularJS 中实例化和初始化控制器
- 在同一控制器(ng-controller)的不同实例之间共享数据
- 从控制器中的 ng-sortable 指令获取可排序实例
- 如何在使用 {{render}} 时访问非单一实例的父控制器
- 测试AngularUI Bootstrap模态实例控制器