如何将对象数组从一个控制器传递到另一个控制器?

How to pass object array from one controller to another?

我是 angularJS 的新手,我有一个问题

我有

<div class="item-hover circle effect1" data-ng-repeat="order in Bands">
    <a ng-click="getPerson(order)">
        <div class="spinner"></div>
        <div class="img">
            <img src="http://onthedoor.blob.core.windows.net/photos/{{ order.PosterPicId }}/fullheight.png" alt="img">
        </div>
        <div class="info">
            <div class="info-back">
                <h3>{{ order.BusinessName }}</h3>
                <p>{{ order.Genre1 }}</p>
                <p>Click to know more about this band</p>
            </div>
        </div>
    </a>
</div>

这里我有大量数据,以便我想要的是当用户点击 ng-click="getPerson(order)" 我想将该订单传递到另一个页面,该页面将显示有关该乐队 EG 的更多详细信息。曲目、演出等

这是我的手环控制器的样子

'use strict';
app.controller('bandsController', ['$scope', 'bandsService', function ($scope, bandsService) {

    $scope.orders = [];

    bandsService.getBands().then(function (results) {

        $scope.Bands = results.data;
        console.log(results.data)
        $scope.getRandomSpan = function () {
            return Math.round( Math.random() * (19 - 1) + 1);;
        }

    }, function (error) {
        //alert(error.data.message);
    });
    $scope.getPerson = function (band) {
        $scope.$broadcast("band", band);
    };

}]);


function DetailCtrl($scope, $location) {
    $scope.$on("band", function (event, person) {
        $scope.person = person;
    });
}

我不知道如何做到这一点我已经阅读了一些帖子,但它只显示有关传递变量的信息,但我想将该特定对象传递给另一个控制器,这样我就不必再次请求到服务器,可以降低速度。

所以,我需要的是当用户点击时我想将该对象传递给另一个页面的控制器并绑定该信息我不知道如何重定向和获取该对象。

谢谢。

更新

app.factory('myService', ['$http', 'ngAuthSettings', function ($http, ngAuthSettings) {
    var savedData = {}
    function set(data) {
        savedData = data;
    }
    function get() {
        return savedData;
    }

    return {
        set: set,
        get: get
    }

}]);

我正在将数据传递到 我的服务 这里

app.controller('bandsController', ['$scope', 'bandsService', function ($scope, bandsService) {

    $scope.orders = [];

    bandsService.getBands().then(function (results) {

        $scope.Bands = results.data;
        console.log(results.data)
        $scope.getRandomSpan = function () {
            return Math.round( Math.random() * (19 - 1) + 1);;
        }
        myService.set(results.data)
        $scope.doComplete = function () {
            $('.clickBands').click(function () {
                alert('');
            })
        }
        $scope.message="jhi";
        $scope.clickFunction = function () {
            $scope.$broadcast('update_parent_controller', $scope.message);
        };

        //myService.set(yourSharedData);




    }, function (error) {
        //alert(error.data.message);
    });

}]);

目前它抛出的异常如 myservice 没有定义我不知道我做错了什么。 我想要的是重定向 banddetails 控制器并在此 my service

中包含数据

一种可能性是有一个服务将存储这个对象的实例:

app.service('myService', function() {
    this.myData = [];

    this.setMyData = function(myData) {
        this.myData = myData;
    };

    this.getMyData = function() {
        return this.myData;
    };
});

现在只需在两个控制器中注入服务即可。在第一个控制器中,就在重定向到第二个控制器之前分配值,并在第二个控制器中从服务中读取值。将该服务视为应用程序的单例存储,您可以在内存中保留一些状态。

如果您只想要一个简单的子弹响应:

1) 您可以注入 $rootScope 模块并在其中存储您的变量,您也可以在您的主体中使用 MainController。

2) 只需使用发送数据的 $emit,并使用 $on 来检索数据。

但是,如果您需要将数组从一个控制器传递到另一个控制器,请尝试考虑如何更好地构建您的代码,$emit 不是很明显,因为它在其源代码中使用了 $watch(非常重的模块)。

我只是不喜欢使用服务来存储简单数据,因为根据更好的架构服务必须只抽象 API 调用(甚至模拟 objs)