Angularjs 在angular.ui-router中使用多个状态和单个控制器

Angularjs 在angular.ui-router中使用多个状态和单个控制器,angularjs,Angularjs,我正在学习angularJS并创建一个使用ui路由器的web应用程序 我对国家的定义如下: angular.module('test', []) .config(function($stateProvider){ $stateProvider. state('root',{ url: '/', abstract:true, templateUrl: '/root.html', control

我正在学习angularJS并创建一个使用ui路由器的web应用程序

我对国家的定义如下:

angular.module('test', [])
.config(function($stateProvider){
  $stateProvider.
       state('root',{
           url: '/',
           abstract:true,
           templateUrl: '/root.html',
           controller: 'MyController'
       })
       .state('root.route1',{
           url: '/route1',
           parent: 'root',
           views:{
               '':{
                   templateUrl: '/route1.html'
                  }
               'estimatedCost@':{
                   templateUrl: '/esitmatedCost.html'
                  }
            }
       })
       .state('root.route2',{
           url: '/route2',
           parent: 'root',
           views:{
               '':{
                   templateUrl: '/route2.html'
                  }
               'estimatedCost@':{
                   templateUrl: '/esitmatedCost.html'
                  }
            }
       })
    });
在route1和route2之间来回导航时,我想共享MyController中的范围变量。当我从route1导航到route2时,它失去了scope变量的值

我不确定我做错了什么

有人能帮我吗? 提前感谢。

我还没有使用过ui路由器,但在过去的几年中,我一直在使用AngularJS,这就是该语言过去的工作方式

控制器的主要目的是控制单个模板上的数据。这些控制器可以通过AngularJS工厂(通常称为服务)相互通信。在您的情况下,您可能希望使用服务,因为成功的路由更改会破坏控制器

角度模块('test',[]) .factory('myFactory',function(){ var info=“你好世界”; 返回{ 信息:信息 }; }) .controller('CtrlOne',函数($scope,myFactory){ $scope.info=myFactory.info; }) .controller('CtrlTwo',函数($scope,myFactory){ $scope.info=myFacotry.info; });
然后,您可以在两个不同视图上使用这两个控制器,它们共享连接它们的服务中的变量。

使用$stateParams在两个状态之间传递参数。 暂停以下步骤:

  • 使用参数对象定义您的状态

      .state('route.route1', {
                url: 'your url name',
                params: {
                    nameOfParamObj: null
                },
                controller: 'your controller',
                templateUrl: 'your template url',
        })
    
  • 从要发送作用域数据的控制器将其用作休耕

    $state.go(toState、params、options)

  • 在toState控制器中,使用$stateParams捕捉状态参数

    $stateParams.yourParamObjectName

  • 确保$stateParams$state服务作为控制器中的依赖项
    查看官方ui路由器文档。

    除了名称之外,您的路由都是相同的,这是故意的吗?除了让两条不同的路由映射到同一
    url
    可能没有什么用处之外,这有什么意义?为什么您需要两个外观完全相同、使用相同数据且具有相同控制器的不同页面?使用factory与数据库通信,使用service促进应用程序内部通信,如果在服务概念中,您需要在配置时完成一些任务-使用provider。控制器通常仅用于与视图交互。对不起,路由不同。@imsheth我可以在工厂中使用$state吗?在我的例子中,在我从route1状态收到报价后,我需要转到新的状态route2以接收另一个带有更新值的报价。