与工厂AngularJS在控制器之间共享数据
Sharing data with between Controllers with a Factory, AngularJS
我想在控制器之间共享数据:
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-rc.4/angular.min.js"></script>
<script>
var myApp = angular.module('myApp',[]);
myApp.factory('Data', function(){
return {show: true, text: "Hello"};
});
myApp.controller('ctrl1', ['$scope', 'Data', function($scope, Data) {
$scope.data = Data;
}]);
myApp.controller('ctrl2', ['$scope', 'Data', function($scope, Data) {
$scope.click = function(){
Data = {text:"Hello2", show:true};
}
}]);
</script>
<body ng-app='myApp'>
<div style="background-color:red;margin-top:30px;" ng-controller="ctrl1">
{{data.text}}
</div>
<div style="background-color:yellow;margin-top:30px;" ng-click="click()" ng-controller="ctrl2">
Click to change data
</div>
</body>
Demohttp://plnkr.co/edit/QHuWLYjBqDvl20fL7eeu?p=preview。但是,如果我写,这就不起作用
Data.text = 'Hello2';
Data.show = true;
它工作得很好。Demohttp://plnkr.co/edit/xKtLUlBu0dQPUsiNCRyC?p=preview
通过指定Json来更新模型会非常方便,我该怎么做?
通过执行Data = {text:"Hello2", show:true};
,您完全覆盖了初始Data
对象,这将导致引用中断。这就是为什么不能只指定一个全新的对象。然而,你可以这样做:
myApp.factory('Data', function(){
return {
prop: {show: true, text: "Hello"}
};
});
以及更高版本:
Data.prop = {text: "Hello2", show: true};
当您编写时
Data = {text:"Hello2", show:true};
您正在用新的本地对象覆盖本地Data
变量
写入时
Data.text = 'Hello2';
Data.show = true;
同样在父作用域中链接的原始对象仍然存在,您正在覆盖Data
对象内部的变量,而不是仅覆盖到对象的本地Data
链接
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 使用服务(AngularJS)在控制器之间共享数据
- AngularJS中的页面之间共享数据返回空
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- 在Knockoutjs中的ViewModels之间共享变量状态
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- Node.js服务器和浏览器之间共享二进制缓冲区
- 使用Angularjs在两个不同页面的控制器之间共享数据
- 在两个浏览器选项卡之间共享变量范围
- 不同进程之间共享Node.js环境
- 在Angular Bootstrap Modal和父控制器之间共享作用域
- 2ng控制器,并且需要在控制器之间共享数据
- Javascript创建函数,以便在其他函数之间共享变量
- 在控制器angular js之间共享数据
- 在javascript客户端和java服务器之间共享Google Analytics ClientID
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 在角度上不同控制器之间共享状态