使用 angular ionic 中的状态传递参数

passing parameters using state in angular ionic

我正在使用 ionic 构建应用程序。

现在我想使用状态通过 url 传递一个变量,但它不起作用。最好的方法是什么?

我的做法:

$stateProvider
    .state('orders', {
        url: "/orders",
        abstract: true,
        templateUrl: "views/side-menu.html",
        cache: false,
        controller: 'OrderCtrl'
    })

    .state('orders.view-order', {
        url: "/view-order?orderid", //<---- THIS ONE
        views: {
            'menuContent': {
                templateUrl: "views/view-order.html"
            }
        },
        cache: false
    })

    .state('orders.open-orders', { 
        url: "/open-orders",
        views: {
            'menuContent': {
                templateUrl: "views/open-orders.html"
            }
        },
        cache: false
    })

我有一个基本控制器"dashboard",我想使用

发送订单
$state.go("orders.view-order", {'orderid': '232323232'});

然后是订单控制器...(只显示一个空对象:(

angular.module(appName).controller('OrderCtrl', 
 function($location, $rootScope, $scope, $ionicPopup,
   $state, $stateParams, $auth, $ionicLoading, 
   $timeout, $interval, newOrderService, jwtHelper){

    console.log($stateParams)
});

'OrderCtrl'属于parent状态

.state('orders', {
    controller: 'OrderCtrl'
    ...

而参数 orderid 是在 child 状态下定义的:

.state('orders.view-order', {
        url: "/view-order?orderid", // here is param defined

这意味着 parent 无法访问这些参数 - 因为它们是为其 child

定义的

所以,我们可以 1) 将参数移动到 parent (我会说是这样)

a working plunker

  .state('parent', {
      url: "/parent/:parentId",
      templateUrl: 'tpl.html',
      controller: 'ParentCtrl',
  })
  .state('parent.child', { 
      url: "/child/:childId",
      template: 'this is a child view',
      controller: 'ChildCtrl',
  })

或者 2) 使用这个技巧,当我们将 $stateParams 放入 $rootScope 并且可以在任何地方观察到它的最新值时:

.run(['$rootScope', '$state', '$stateParams',
  function ($rootScope, $state, $stateParams) {
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams;
}])

这些示例状态 a working plunker

  .state('parent', {
      url: "/parent",
      templateUrl: 'tpl.html',
  })
  .state('parent.child', { 
      url: "/child/:childId",
      template: 'this is a child view',
      controller: 'ChildCtrl',
  })