Angularjs 更改ui路由器中的共享数据
我想问你们关于在ui路由器中的状态之间共享数据的问题。这是我的$stateProvider示例Angularjs 更改ui路由器中的共享数据,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我想问你们关于在ui路由器中的状态之间共享数据的问题。这是我的$stateProvider示例 $stateProvider.state('start',{ url:"/inicio", templateUrl:"./app/templates/start.html", abstract: true, data:{ title: 'Hello world' }, controller: 'aplicacionController',
$stateProvider.state('start',{
url:"/inicio",
templateUrl:"./app/templates/start.html",
abstract: true,
data:{
title: 'Hello world'
},
controller: 'aplicacionController',
}).state('start.App',{
url:"/aplicacion",
templateUrl:"./app/templates/escritorio.html"
}).state('start.App.onlyMenu',{
url:"/ms",
views:{
'menu':{
templateUrl:"./app/templates/menu.html",
controller:'menuController'
},
'mainFrame':{
templateUrl: './app/templates/whiteBoard.html',
controller:'whiteBoardController'
}
}
}).state('start.app.JqPlotCharts',{
url:"/jqp",
views:{
'menu':{
templateUrl:"./app/templates/menu.html",
controller:'menuController'
},
'mainFrame':{
templateUrl: './app/templates/jqplotcharts.html',
controller:'jqplotCtrl'
}
}
});
如您所见,我有一个名为start的父状态,其中有一个数据字段,其title属性的值为“helloworld”。
aplicacionController有两个任务:第一个任务是读取title的值并存储在名为title的$scope变量中:
$scope.title = $state.current.data.title;
第二个是观察标题是否更改,如果更改了,则更新$state.current.data.title的值:
$scope.$watch('title', function(){
$state.current.data.titulo = $scope.title;
});
当然,在模板start.html中,我有一个小表单来更改此值:
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<a class="navbar-brand" href="#">{{title}}</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" ng-model="title">
</div>
</form>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
我的意图是,所有子状态都读取title的值,当它从父模板更改时,子状态中的值也会更新。然而,它从未发生过。该值在父状态下更新,但从不在子状态下更新
我错过了什么
谢谢我想解释一下为什么这个要求应该有点不同的想法 首先,应将状态的
.data
设置(请参阅)视为配置部分。含义:只读,常量。此外,正如.data
继承所示,有一些智能机制可以提供与上述要求相反的功能:
子状态将从父状态继承数据属性,它们可以覆盖这些属性
正如我们所看到的,这就是我们可以使用自定义.data
对象配置状态的方法
但如何解决我们面临的问题呢?嗯,有一个真正的本机Angular JS
解决方案:
服务
这样的对象将作为单体工作。我们可以在任何地方拥有它,我们可以将它放入$rootScope
。。。我们可以做很多。但主要是,我们可以将其用于数据共享。请参见此处的类似示例和解决方案:
这是一个名为Settings
.factory('Settings', function(){
return {
Property1: null,
Property2: null,
...
};
})
这个例子的一个例子。在$watch中,它应该是$state.current.data.title=$scope.title代码>而是$state.current.data.titulo=$scope.title代码>?有一点可能不是很明显,即父状态中的自定义状态数据只有在属性被称为“数据”时才会传递给子状态。因此,如果只调用属性customData2而不将其放入“data”对象中,则不会将其传递到子状态。
.factory('Settings', function(){
return {
Property1: null,
Property2: null,
...
};
})