Angularjs 更改ui路由器中的共享数据

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',

我想问你们关于在ui路由器中的状态之间共享数据的问题。这是我的$stateProvider示例

$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,
    ...
  };
})