Ionic:在控制器之间传递数组元素

Ionic: Passing array elements between controllers

我有一个控制器和视图,用于计算和显示特定元素。当我单击视图上的一个按钮时,我想打开另一个显示有关该项目的更多信息的按钮。

将元素传递给另一个控制器进行显示的最佳方式是什么?

非常感谢

您可以构建一项服务,从一个控制器获取数据并将其传递给另一个控制器,如下所示:

.factory('shareData', function(){

    var finalData;
    return {
        sendData: function(data) {
            finalData = data;
        },
        getData: function() {
            return finalData;
        }
    }
});

您的另一个选择是在您的主控制器中创建一个共享变量('app' ionic 中的控制器)

.controller('app', function($scope){
    $scope.data;
})
.controller('app.controller1', function($scope){
    $scope.data = "Hello World";
})
.controller('app.controller2', function($scope){
    console.log($scope.data); //Hello World
});

除了 Matan Gubkin 包含的选项之外,还有一个选项是将数组包含在 $rootScope 中:这样您就可以从任何地方访问它。

@Matan Gubkin 的想法很接近,但您应该使用该服务来获取您想要的特定项目。

.factory('shareData', function(){

  var finalData = ["Hello World",'more data'];

  return {
    sendData: function(data) {
        finalData = data; 
    },
    getData: function() {
        return finalData;
    },
    getItem:function(_id) {
       return finalData[_id];
    }
  }
});

然后在设置您的控制器

.controller('app.controller', function($scope){

})
.controller('app.controller-list', function($scope,shareData){
    $scope.data = shareData.getData();
})
.controller('app.controller-detail', function($scope,$stateParams,shareData){
    // use stateParams to get index
    console.log(shareData.getItem($stateParams.index)); //
});

设置你的路线

.config(function($stateProvider, $urlRouterProvider) {
 $stateProvider

  .state('app', {
    url: "/app",
    abstract: true,
   controller: 'app.controller'
  })

  .state('app.controller-list', {
    url: "/list",
  })

  .state('app.controller-detail', {
    url: "/detail/:index", // <-- pass in index as stateParam
  });
   // if none of the above states are matched, use this as the fallback
   $urlRouterProvider.otherwise('/app/list');
});