Angular.js:跨多个控制器的双向数据绑定
Angular.js: Two-Way data binding across multiple controllers
我在Angular中有这样的代码结构:
app.controller(AlphaCtrl, function(interstellarService){
$scope.interstellarService = {
routeToEarth: interstellarService.get('routeToEarth'),
}
})
app.controller(CentauriCtrl, function(interstellarService){
$scope.interstellarService = {
routeToEarth: interstellarService.get('routeToEarth'),
}
})
星际服务存储在浏览器存储中:
appServices.factory('interstellarService', function ($rootScope, $localStorage){
return {
set: function(entidy, value) {
$localStorage[entidy] = value;
},
get: function(entidy) {
if ($localStorage[entidy] !== undefined) {
return $localStorage[entidy];
} else return false;
}
}
});
现在,当我通过setter方法更改AlphaCtrl
和routeToEarth
属性时,我希望半人马座Ctrl相应地更新,因为数据在每个控制器上都绑定到服务,如:
AlphaCtrl<--data-->星间服务<--数据-->半人马座Ctrl
这是不起作用的:我想在我的半人马座HTML中使用并共享routeToEarth
中存储的值,例如
<li>
<a>
{{interstellarService.routeToearth}} && 'Timetravel' || 'Wormhole' }}
</a>
</li>
我在这里错过了什么?
您需要进行某些更改才能运行它。
- 缺少
AlphaCtrl
和CentauriCtrl
的引号 - 错过为
AlphaCtrl
和CentauriCtrl
控制器注入$scope - 控制器和服务模块是不同的,您提到它是
appServices
用于服务,app
用于控制器
工作演示
脚本
var appServices = angular.module('app', ['ngStorage']);
appServices.factory('interstellarService', function ($rootScope, $localStorage) {
return {
set: function (entidy, value) {
$localStorage[entidy] = value;
},
get: function (entidy) {
if ($localStorage[entidy] !== undefined) {
return $localStorage[entidy];
} else return false;
}
}
});
appServices.controller('AlphaCtrl', function (interstellarService, $scope) {
interstellarService.set('routeToEarth', 'Alpha');
$scope.interstellarService = {
routeToEarth: interstellarService.get('routeToEarth'),
}
console.log('AlphaCtrl value::', $scope.interstellarService);
})
appServices.controller('CentauriCtrl', function (interstellarService, $scope) {
interstellarService.set('routeToEarth', 'Centauri');
$scope.interstellarService = {
routeToEarth: interstellarService.get('routeToEarth'),
}
console.log('CentauriCtrl value::', $scope.interstellarService);
})
Html
<div ng-controller="AlphaCtrl">
{{interstellarService.routeToEarth}}
</div>
<div ng-controller="CentauriCtrl">
{{interstellarService.routeToEarth}}
</div>
当我在AlphaCtrl
中更改它时,将其放入我的CentauriCtrl
中最终显示了通往地球的路线。
$rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){
$scope.interstellarService = {
routeToEarth: interstellarService.get('routeToEarth'),
}
});
向这个SO问题致敬:AngularJS引导Navbar
相关文章:
- 控制器和外部指令之间的双向数据绑定
- NodeJS与AngularJS,所需的HTML文件不是跨控制器的数据绑定全局变量
- 角度数据绑定一个使用“控制器作为”语法
- 控制器中的$scope在视图中不可访问/数据绑定不工作(IONIC/ANGULAR)
- 为什么我在控制器中的变量没有定义,但它在具有数据绑定的HTML页面中正确显示
- 控制器中的AngularJS数据绑定和在不同作用域上操作的模板
- Angular.js:跨多个控制器的双向数据绑定
- Angularjs-数据绑定无法与控制器一起工作
- 与指令控制器的双向数据绑定
- AngularJS如何在服务和控制器之间建立双向数据绑定
- 服务和控制器之间的AngularJS数据绑定
- Grails控制器中的子对象数据绑定
- 多控制器页面数据绑定无效
- AngularJS:如何在两个隔离的控制器和一个共享服务之间创建一个双向数据绑定
- Angularjs的数据绑定没有在控制器中更新
- angularjs中的服务和控制器之间没有发生数据绑定
- 模型视图控制器-AngularJS中是否可以在经典的javascript函数中使用数据绑定
- AngularJS - 使用控制器作为语法和服务属性的 DRY 双向数据绑定
- 单击时将数据绑定到控制器
- 将http请求数据绑定到另一个控制器